查看: 106|回复: 5|关注: 0

[已答复] 无法执行赋值,出错

[复制链接]

新手

5 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
发表于 6 天前 | 显示全部楼层 |阅读模式
clear;
n=input('请输入线性方程组阶数:n=');
b=zeros(1,n);
A=input('请输入系数矩阵:A=\n');
b(1,:)=input('请输入线性方程组右端向量:b=\n');
b=b';
C=[A,b];
for i=1:n-1
    [maximum,index]=max(abs(C(i:n,i)));
    index=index+i-1;
    T=C(index,:);
    C(index,:)=C(i,:);
    C(i,:)=T;%%找到对角线下元素绝对值最大者并交换
    for k=i+1:n
        if C(k,i)~=0
            C(k,i)=C(k,:)-C(k,i)/C(i,i)*C(i,:);%%消去主元
        end
    end
end
x=zeros(n,1);
x(n)=C(n,n+1)/C(n,n);
for i=n-1:-1:1
    x(i)=(C(i,n+1)-C(i,i+1:n)*x(i+1:n,1))/C(i,i);
end
disp('方程组的解为:');
fprintf('%.5g\n',x);

运行如下:
>> Chapter3
请输入线性方程组阶数:n=3
请输入系数矩阵:A=
[1 2 3;4 5 6;7 8 9]
请输入线性方程组右端向量:b=
[10 11 12]
无法执行赋值,因为左侧的大小为 1-by-1,右侧的大小为
1-by-4。

出错 Chapter3 (line 16)
            C(k,i)=C(k,:)-C(k,i)/C(i,i)*C(i,:);%%消
            去主元


不明白为什么左右侧大小不一致?而且我输入的三阶矩阵为什么大小是1*4?应该如何修改?

回复主题 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

174 麦片

财富积分


50500


3

主题

121

帖子

23

最佳答案
QQ
  • 关注者: 2
发表于 6 天前 | 显示全部楼层
你在赋值的时候,C(k,i)是一个标量,但是右边中的C(k,:)是一个行向量(如果矩阵C的列数不是1的话),这样当然是不能赋值的了。
至于怎么改就需要里面你想做什么了,但是你给我的信息有点少,还请提问时描述清楚。
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

9

主题

1680

帖子

361

最佳答案
  • 关注者: 82
发表于 6 天前 | 显示全部楼层
仅供参考
矩阵是3*4阶,所以C(k,:)(第k行所有列)-C(k,i)/C(i,i)*C(i,:)是1*4,无法赋值
输入是3*3,但第七行C=[A,b];有个合并
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
 楼主| 发表于 6 天前 | 显示全部楼层
younshion 发表于 2020-11-20 10:19
你在赋值的时候,C(k,i)是一个标量,但是右边中的C(k,是一个行向量(如果矩阵C的列数不是1的话),这样当 ...

这道题是编出列主元消去法的通用程序,第16行我理解是消去第k行的对角线元素,使之为0的过程
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
 楼主| 发表于 6 天前 | 显示全部楼层
李71 发表于 2020-11-20 15:19
这道题是编出列主元消去法的通用程序,第16行我理解是消去第k行的对角线元素,使之为0的过程 ...

我好像会了,把16行改成C(k,:)=C(k,:)-C(k,i)/C(i,i)*C(i,:);就可以了
谢谢
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


1

主题

4

帖子

0

最佳答案
 楼主| 发表于 6 天前 | 显示全部楼层
20141303 发表于 2020-11-20 10:19
仅供参考
矩阵是3*4阶,所以C(k,(第k行所有列)-C(k,i)/C(i,i)*C(i,是1*4,无法赋值
输入是3*3,但第 ...

明白了谢谢
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /5 下一条

快速回复 返回顶部 返回列表