qq_52126050 2024-04-08 23:40 采纳率: 0%
浏览 15
已结题

关于#matlab#求解矩阵线性方程组的问题:

求各位解答
需要求解一个矩阵线性方程组,如下图:

img


(其中r seita seita’已知)
此方程含有五个未知数,我想要通过matlab+simulink实现:知道其中三个未知数,求剩下两个。为此,我按照手头资料搭建了simulink模型,如下图:

img


其中matlab function代码如下:

 function acc=accplane(u)
r=u(1); theta=u(2); dtheta=u(3);
num=8; n_vari=5; n_unknow=2;

a=zeros(n_unknow,n_vari);
a(1,1)=r*cos(theta+pi/2); a(1,2)=1; a(1,4)=-1;
a(2,1)=r*sin(theta+pi/2); a(2,3)=1; a(2,5)=-1;
b=zeros(n_unknow,1);
b(1,1)=-r*dtheta^2*cos(theta+pi);
b(2,1)=-r*dtheta^2*sin(theta+pi);
acc =solution(num,n_vari,n_unknow,u,a,b);
function x =solution(num,n_vari,n_unknow,u,a,b)
n_temp=num-n_vari+1;
k=1;
a1=zeros(n_unknow,n_unknow);
for i=1:n_vari
    if u(n_temp)==Inf
        a1(:,k)=a(:,i);
        k=k+1;
    else
        b=b-a(:,i)*u(n_temp);
    end
    n_temp=n_temp+1;
end
x =inv(a1)*b;

但是这样得出的结果与资料上的参考答案(seita’’=-2.433,yB’’=1.304)不符。
想问一下问题出在哪里?

  • 写回答

22条回答 默认 最新

  • 檀越@新空间 2024-04-08 23:40
    关注
    获得0.45元问题酬金

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    在分析问题时,首先要注意矩阵线性方程组的建立和求解过程。根据提供的代码和问题描述,可以考虑以下可能出现的问题和解决方案:

    1. 矩阵建立过程问题:

      • 检查矩阵a和向量b的建立过程是否正确,包括每一项的赋值和计算是否符合线性方程组的表达式,例如是否正确地将已知的r、seita及seit'值代入。
      • 确保矩阵a的每一行代表一个线性方程,每一列代表一个未知数的系数,以及向量b的每个元素代表相应方程的右边常数项。
    2. 求解过程问题:

      • 在求解过程中,根据代码中的solution函数进行了未知数的代入和消元操作,可能存在未知数代入错误或消元过程有误。
      • 检查消元操作是否按照预期进行,确保代入和消元过程不会导致数据的混乱或错误。
    3. 求解结果验证:

      • 确认最终求解结果的正确性,包括利用该模型对已知条件进行测试,如将已知未知数输入后验证方程组的解是否正确。

    针对以上问题,可以考虑以下解决方案:

    • 检查矩阵a和向量b的建立过程

      • 仔细检查矩阵a和向量b的赋值过程,确保每一项的计算是准确的,特别是将已知的r、seita及seit'值正确代入。
      • 可以逐行输出a和b的数值,确保每一行代表一个线性方程的系数和右边常数项。
    • 验证求解过程

      • 在求解过程中,要确保消元操作和未知数代入的正确性,可以在每一步输出相应的中间结果进行验证。
      • 检查代入和消元过程是否按照预期进行,特别是检查代入不为Inf的情况下的计算是否正确。
    • 求解结果验证

      • 若矩阵建立和求解过程都没有问题,可以尝试利用已知的r、seita及seit'值手动代入计算,验证方程组的解是否与参考答案一致。
      • 如果验证结果有差异,则可以在模型中加入更多的输出,分析中间数据的变化,以确定问题出现的具体步骤。

    另外,也要考虑到matlab中矩阵求解过程中可能存在的数值计算精度问题,可以尝试使用matlab的debug工具或者手动添加输出进行调试。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月16日
  • 修改了问题 4月8日
  • 修改了问题 4月8日
  • 赞助了问题酬金15元 4月8日
  • 展开全部