【问题标题】:input array of strings in matlabmatlab中的输入字符串数组
【发布时间】:2014-03-20 06:50:33
【问题描述】:

问题:求解线性方程组

我有一个 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.,

我使用了以下代码,我得到了结果,但我只能使用单元格值。当我尝试用数字给出表达式时,它显示以下错误:

*警告:文件:pro.m 行:5 列:9 此行的表达式在执行时会产生错误。错误将是:错误使用 ==> vertcat CAT 参数尺寸不一致。

???在 5 处使用 ==> pro 时出错 使用 ==> vertcat CAT 参数时出错,尺寸不一致。*

这是我的代码:

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    
;

帮助我如何输入带有数字和矩阵单元的字符串...

【问题讨论】:

  • 不是要侮辱你,但那是你那里的一些非常糟糕的代码......你能忽略实现和你遇到的问题,并在编辑中解释你的最终目标是什么?我怀疑您可以在 5 行代码中实现该目标...
  • 是的!那是我的代码的初始阶段,以检查我的逻辑是否正确。后来我递归地实现了它并使它变短了。

标签: arrays string matlab input numerical


【解决方案1】:

这不是在 Matlab 中初始化 cell 的有效表达式:

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

% Define system
A = [2 3 1; 7 -1 1; 4 0 5];
b = [1 0 1].';
% Solve system
X = -inv(A)*b; 

【讨论】:

  • ...为什么是减号?为什么不使用更快、更准确的X = A\b
  • 减号只是因为我定义系统的方式(AX+b=0)。使用inv()只是因为我通常处理奇异矩阵,所以我很容易可以更改为pinv()。但是,对于简单的线性系统,X=A\b 确实更好:mathworks.se/help/matlab/ref/mldivide.html
  • 啊,明白了。通常它写成Ax=b,我没有看到你的等式。还有inv 的使用,嗯,这总是让我烦恼:所有 我曾经遇到的使用它都受益于使用lulinsolvmldivide 等,就术语而言性能、稳定性和准确性。所以我通常在这里大惊小怪,因为很多人从谷歌来到这里,半读问题,在答案中看到一些代码并使用它,从而使inv()的错误使用循环永久化:)
  • 我支持你的十字军东征 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2015-05-23
  • 1970-01-01
相关资源
最近更新 更多