使用matlab求解线性/非线性方程

使用matlab求解线性方程

Ax = B 形式   A ,B为矩阵

    (1) A为非奇异矩阵时,既有唯一解时

共有三种方法求解:

1
2
3
4
5
6
7
8
example
clear all
A = [3 -9; 2 4];
b = [-42; 2];
% three methods
x = inv(A)*b       % good
x = A\b            % better
x = linsolve(A,b)  % best

 https://www.mathworks.com/help/matlab/ref/linsolve.html 

 (2)A为奇异矩阵时,且A阵和[A,C]阵秩相同,则该方程有无数个解;

可以用 x = null(A); 先求出系统的齐次方程AX = 0的基础解系,然后再用 x0 = pinv(A)*B 求出方程的一个特解

然后得出系统的通解:X =a(1) * x(:,1) + a(2) * X(:,2) + ..... + a(n-m) * x(:,n-m) + x0;

 

  

 

 此外,可以采用rref(C),C = [A,B];进行基本行变换,得出方程的解析解;

  

    (3)若A和[A,B]矩阵的秩不同,则原方程就没有解,只能用x = pinv(A)*B求出方程的最小二乘解;

 

使用matlab求非线性方程

 Equations and systems solver - MATLAB solve (mathworks.com)

   Solve system of nonlinear equations - MATLAB fsolve (mathworks.com)

 求解代数方程的符号解。

      S = solve(eqn1,eqn2,...,eqnM,var1,var2,...,varN)

eqn 是符号表达式,可以是方程或不等式。vars是指定未知变量的符号变量表示。

 

 fsolve 用来解决多个变量的非线性方程组。

     X = fsolve(FUN,X0,OPTIONS)

  还可以使用matlab函数或者匿名函数来描述方程

1
2
3
4
5
6
7
function F=myFunction(z)
  x = z(1);
  y = z(2);
 
  F(1)=x^2+y^2-20;
  F(2)=y - x^2;
end

  

1
2
3
4
clear all
z_G = [1; 1];
z = fsolve(@myFunction, z_G);
disp(z)

 匿名函数形式-----因为匿名函数标准形式为为针对自变量x,所以要都写成x变量的形式

1
2
3
4
5
6
>> f= @(x)[x(1).^2+x(2).^2-20;x(2) - x(1).^2];
>> X0 =[1;1];X= fsolve(f,X0)
X =
 
    2.0000
    4.0000

 还可以设置求解精度,options 

x = fsolve(fun,x0,options)

option =optimset;

option .TolX = 1e-20;  option .TolFun = 1e-20; 

x = fsolve(f,x0,option )

 

posted @   试一下就知道了  阅读(1457)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
点击右上角即可分享
微信分享提示