总体思路:根据要保留元素的条件使用find()命令或者使用for循环对每个元素进行检测,不满足条件的元素赋值为0
参考代码
clc
clear all
close all
%-- 使用find()语句 --%
x = [1+2i 2+3i 3+4i];
ix = find(x~=(2+3i)); % 只保留2+3i,其他元素变成0
x(ix) = 0;
disp('x=');
disp(x);
%--------------------%
%-- 使用for循环语句 --%
x1 = [1+2i -2+3i 3+4i -8-5i];
for i=1:length(x1) % 假设只保留元素实部大于零的
if( real(x1(i))<0 )
x1(i) = 0;
end
end
disp('x1=');
disp(x1);
%--------------------%
输出效果
x=
0.0000 + 0.0000i 2.0000 + 3.0000i 0.0000 + 0.0000i
x1=
1.0000 + 2.0000i 0.0000 + 0.0000i 3.0000 + 4.0000i 0.0000 + 0.0000i
你可以用递归回溯。
[f.m文件]:
function f(A, k)
if ~isempty(k) && all(sum(A(:, k), 2) == 1)
disp(k)
end
if isempty(k)
n = 1;
else
n = k(end)+1;
end
for i = n:size(A,2)
f(A, [k i]);
end
end
[调用]:
A = [1 0 1; 0 1 1; 1 0 1]; % 示例
f(A, [])
另外,行列分清楚。看了好一会才看明白你的题目,总是把列说成行。
使用sum函数
sum(matrix, 1),各行相加
sum(matrix,2),各列相加
直接矩阵加法啊,例如:
clc,clear
a=rand(5)
b=rand(5)
c=a+b