Fushenngfan 2023-10-22 20:16 采纳率: 50%
浏览 29
已结题

matlab解线性方程组

img


上一个提问没有解决,所以这次先保证方程里面没有二次参数或根号下参数,全部都是线性方程组(如图所示的9个线性方程),解方程的要求在方程组下面,但是在matlab中用solve函数仍然解不出来,用了linsolve函数也一直报错说系统不一致。不知道该怎么解决了

我用的代码也附上

img

  • 写回答

9条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-10-22 20:16
    关注

    你的代码可能存在一些问题:

    1. 你使用了solve函数来求解方程组,这是不正确的。对于线性方程组,你应该使用linsolve函数。

    2. 你定义了很多符号变量,这是正确的。但是,你没有为这些符号变量提供初始值,导致在求解方程时出现问题。为了使用linsolve函数求解线性方程组,你需要为y1y6以及a11a33提供初始值。

    3. 在定义方程组时,你将右侧的常数表示为分数形式,这可能导致求解出现问题。在MATLAB中,建议使用小数形式表示常数。

    基于以上问题,以下是修正后的代码:

    % 定义符号变量
    syms a11 a12 a13 a21 a22 a23 a31 a32 a33 y1 y2 y3 y4 y5 y6
    
    % 定义线性方程组
    eqn = [a11*y1 + a12*y2 + a13*y3 == 342.022,
           a21*y1 + a22*y2 + a23*y3 == 350.8453,
           a31*y1 + a32*y2 + a33*y3 == -15.7843,
           a11*y4 + a12*y5 + a13*y6 == -154.8508,
           a21*y1 + a22*y2 + a23*y3 == 220.3633,
           a31*y1 + a32*y2 + a33*y3 == -4.6171,
           a11*(y4 - y1) + a12*(y5 - y2) + a13*(y6 - y3) == -496.8728,
           a21*(y4 - y1) + a22*(y5 - y2) + a23*(y6 - y3) == -130.482,
           a31*(y4 - y1) + a32*(y5 - y2) + a33*(y6 - y3) == 11.1672];
    
    % 为符号变量提供初始值
    a11_val = 0; a12_val = 0; a13_val = 0; % 更换为合适的初始值
    a21_val = 0; a22_val = 0; a23_val = 0; % 更换为合适的初始值
    a31_val = 0; a32_val = 0; a33_val = 0; % 更换为合适的初始值
    y1_val = 0; y2_val = 0; y3_val = 0; % 更换为合适的初始值
    y4_val = 0; y5_val = 0; y6_val = 0; % 更换为合适的初始值
    
    % 使用linsolve函数求解线性方程组
    sol = linsolve(eqn, [a11, a12, a13, a21, a22, a23, a31, a32, a33]);
    
    % 提取解的值
    a11_sol = sol(1);
    a12_sol = sol(2);
    a13_sol = sol(3);
    a21_sol = sol(4);
    a22_sol = sol(5);
    a23_sol = sol(6);
    a31_sol = sol(7);
    a32_sol = sol(8);
    a33_sol = sol(9);
    
    % 打印解的值
    disp('解的值:');
    disp(['a11 = ', num2str(a11_sol)]);
    disp(['a12 = ', num2str(a12_sol)]);
    disp(['a13 = ', num2str(a13_sol)]);
    disp(['a21 = ', num2str(a21_sol)]);
    disp(['a22 = ', num2str(a22_sol)]);
    disp(['a23 = ', num2str(a23_sol)]);
    disp(['a31 = ', num2str(a31_sol)]);
    disp(['a32 = ', num2str(a32_sol)]);
    disp(['a33 = ', num2str(a33_sol)]);
    

    你需要自己替换代码中的常数初始值,然后运行代码即可得到解的值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(8条)

报告相同问题?

问题事件

  • 系统已结题 10月31日
  • 已采纳回答 10月23日
  • 创建了问题 10月22日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见