Arrays matlab中的字符串输入数组

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., 我使用了下面的代码,得到了结果,但我只能使用单元格值。当我尝试用

问题:解线性方程组

我有一个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.,
我使用了下面的代码,得到了结果,但我只能使用单元格值。当我尝试用数字给出表达式时,它显示以下错误:

*警告: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;