Arrays matlab中的字符串输入数组
问题:解线性方程组 我有一个3×3的矩阵,我想取3个表达式作为输入,其中包含矩阵单元,如Arrays matlab中的字符串输入数组,arrays,string,matlab,input,numerical,Arrays,String,Matlab,Input,Numerical,问题:解线性方程组 我有一个3×3的矩阵,我想取3个表达式作为输入,其中包含矩阵单元,如 2*b(1,1)+3*b(1,2)+3*b(1,3) 3*b(2,1)+4*b(2,3)+3*b(2,3) 并用矩阵中不同的单元格值对其进行评估 0 1 0 1 0 0 1 0 0 0 1 0 0 1 0 1 0 0 etc., 我使用了下面的代码,得到了结果,但我只能使用单元格值。当我尝试用
2*b(1,1)+3*b(1,2)+3*b(1,3)
3*b(2,1)+4*b(2,3)+3*b(2,3)
并用矩阵中不同的单元格值对其进行评估
0 1 0
1 0 0
1 0 0
0 1 0
0 1 0
1 0 0 etc.,
我使用了下面的代码,得到了结果,但我只能使用单元格值。当我尝试用数字给出表达式时,它显示以下错误:
*警告:File:pro.m行:5列:9执行此行上的表达式时将生成错误。错误将是:错误使用
==>vertcat参数维度不一致
???错误使用==>pro at 5错误使用==>vertcat参数维度不一致*
这是我的密码:
clc;
clear all;
close all;
cell = ['b(1,1)+b(1,2)';'b(2,1)+b(2 ,3)';'b(3,3)+b(3,2)'];
exp = cellstr(cell);
res = [0,0,0];
display(res);
display(exp);
a = zeros(3,3);
for i = 1:1:3
a(1,i) = 1;
if(i>1)
a(1,i-1) = 0;
end
for j = 1:1:3
a(2,j) = 1;
if(j>1)
a(2,j-1) = 0;
end
for k = 1:1:3
a(3,k) = 1;
if(k>1)
a(3,k-1) = 0;
end
b = a;
res(k) = eval(exp{k});
if res(1) == 1
if res(2) == 1
if res(3) == 1
display(res);
display(b);
break;
end
end
end
end
a(3,k)=0;
end
a(2,j) = 0;
end
;
帮助如何输入带有数字和矩阵单元格的字符串…这不是在Matlab中初始化a的有效表达式:
cell = ['b(1,1)+b(1,2)';'b(2,1)+b(2 ,3)';'b(3,3)+b(3,2)'];
您必须使用花括号{}:
cell = {'b(1,1)+b(1,2)';'b(2,1)+b(2 ,3)';'b(3,3)+b(3,2)'};
顺便说一句,若你们想解AX+b=0形式的线性方程,你们可以试试X=-inv(A)*b
…为什么是负号?为什么不更快更准确呢?负数是因为我是如何定义系统的(AX+b=0)。之所以使用
inv()。但是,对于简单的线性系统,X=A\b
确实更好:啊,明白了。通常写的是Ax=b,我没有看到你的方程。使用inv
,这总是让我感到困扰:我遇到的所有使用它的人都受益于使用lu
,linsolv
,mldivide
,等等,在性能、稳定性和准确性方面。所以我通常在这里大惊小怪,因为很多人从谷歌来到这里,一半读问题,在答案中看到一些代码并使用它,从而使inv()
:)的错误使用循环永久化。我支持你的改革:)不要侮辱你,但是你有一些非常糟糕的代码…你能忽略实现和它的问题,在编辑中解释你的最终目标是什么吗?我怀疑你能用5行代码达到这个目标…是的!这是我检查逻辑是否正确的代码的初始阶段。后来我递归地实现了它,并将其缩短。
% Define system
A = [2 3 1; 7 -1 1; 4 0 5];
b = [1 0 1].';
% Solve system
X = -inv(A)*b;