-
2021-04-18 07:01:12
fslove - Matlab求解多元多次方程组
简介: 之前看到网上的一些资料良莠不齐,各种转载之类的,根本无法解决实际问题,所以我打算把自己的学到的总结一下,以实例出发讲解fsolve。 示例如下: $$ \begin{cases} 2x_1 - x_2 = e^{ax_1} \ -x_1 + 2x_2 = e^{ax_2} \ \end{cases} $$ 具体的求解过程在后面 点击跳转
1. fsolve的基本使用
调用格式一:
X = fslove(FUN,X0)
功能:给定初值X0,求解方程组的解,X就是返回的解
调用格式二:
X = fsolve(FUN,X0,OPTIONS)
功能:同上,并解决默认参数优化为options指定值
调用格式三:
[X,FVAL] = fslove(FUN,X0,...)
功能:返回X处目标函数值
调用格式四:
[X,FVAL,EXITFLAG] = fslove(FUN,X0,...)
功能:返回EXITFLAG的值,用来描述计算退出的条件,其中EXITFLAG取值和相应的含义如下表。(主要作为判断条件来使用)
EXITFLAG
含义
1
函数fslove收敛于解X处
2
X的变化小于限制
3
残差变化小于限制
4
重要搜索方向小于限制
0
达到最大迭代次数或者评价标准
-1
算法由输出函数终止
-2
算法无法收敛到解的点
-3
信赖域半径太小
-4
线搜索在当前不能充分减少残差
调用格式五:
[X,FVAL,EXITFLAG,OUTPUT] = fslove(FUN,X0,...)
功能:包含OUTPUT的输出
调用格式六:
[X,FVAL,EXITFLAG,OUTPUT,JACOB] = fslove(FUN,X0,...)
功能:返回雅各比矩阵
2.方程求解
(1) 编制函数文件fun.m
编写函数主要用来书写函数的表达式。
function f = fun(x,a,b,c) % b c可以是随意的参数
f1 = 2*x(1)-x(2)-exp(a*x(1));
f2 = -x(1)+2*x(2)-exp(a*x(2));
f = [f1;f2];
% 也可以写成下面的方式
% f = [2*x(1)-x(2)-exp(a*x(1));-x(1)+2*x(2)-exp(a*x(2))];
(2) 给定函数的参数值和初值(解在周围寻找)
调用求解函数 fslove
>> a = -1;
>> x0 = [-5,-4];
>> [x,FVAL,EXITFLAG,OUTPUT,JACOB] = fsolve(@(x)fun(x,a,1,1),x0);
@(x)fun(x,a,1,1)调用fun函数,函数的参数是a,1,1,求解x的值 执行后调用x返回,也就是X的解。
x =
0.5671 0.5671
调用FVAL显示在目标解的函数值,可以看出,FVAL越小越接近真实解。
FVAL =
1.0e-09 *
-0.4242 -0.3753
调用EXITFLAG 结合上面的表格可以知道,函数FSOLVE收敛于解X处。
EXITFLAG =
1
更多相关内容 -
Matlab求解多元高次方程组
2021-04-18 05:38:34求解方程: 其中,已知量为:x_TE_1=1.23; y_TE_1=3.3232; z_TE_1=0.9876; h_T=0;R_E=6378137; R_P=6356752;x_ES=1; y_ES=1; z_ES=1;求解:x_TE,y_TE,z_TE代码:x_TE_1=1.23;y_TE_1=3.3232; z_TE_1=0.9876;R_E=...求解方程:
其中,已知量为:
x_TE_1=1.23; y_TE_1=3.3232; z_TE_1=0.9876; h_T=0;
R_E=6378137; R_P=6356752;
x_ES=1; y_ES=1; z_ES=1;
求解:x_TE,y_TE,z_TE
代码:
x_TE_1=1.23;y_TE_1=3.3232; z_TE_1=0.9876;
R_E=6378137; R_P=6356752;
x_ES=1; y_ES=1; z_ES=1;
h_T=0;
syms x_TE y_TE z_TE
eq1=(x_TE-x_ES)/(x_TE_1-x_ES)-(y_TE-y_ES)/(y_TE_1-y_ES);
eq2=(x_TE-x_ES)/(x_TE_1-x_ES)-(z_TE-z_ES)/(z_TE_1-z_ES);
eq3=(x_TE^2)/((R_E+h_T)^2)+(y_TE^2)/((R_E+h_T)^2)+(z_TE^2)/((R_P+h_T)^2);
f = matlabFunction([eq1;eq2;eq3], 'vars', {[x_TE y_TE z_TE]});
x0 = [x_TE_1 y_TE_1 z_TE_1];
options=optimset('Display','iter','MaxFunEvals',1000,'TolFun',1e-10);
[x,fval,exitflag,output] = fsolve(f,x0,options);
-
python求解多元多次方程组或非线性方程组
2020-12-22 14:15:24背景:如何使用python求解多元多次方程组或者非线性方程组。 原创内容,转载注明出处!请勿用于商业用途! (上篇用python拟合2019nCov感染人数的文章被不少博主转载了,发的比较早,不少博主在文章基础上添加新内容... -
多元一次方程组解方程源代码
2017-03-16 16:01:37多元一次方程组解方程源代码,工程大型方程一般都是稀疏矩阵,共轭梯度法计算速度快,精度高 -
Python-scipy-多元高次方程组求解
2019-11-20 11:25:57#from sympy import * from scipy.optimize import * import numpy as np import pylab as pl #x = symbols('x') #y = symbols('y') #x_set = [100, 86, 20] #y_set = [80, 40 ,60] #w_set = [425, 320, 220] ...#from sympy import * from scipy.optimize import * import numpy as np import pylab as pl #x = symbols('x') #y = symbols('y') #x_set = [100, 86, 20] #y_set = [80, 40 ,60] #w_set = [425, 320, 220] #value_default1 = 0 #value_default2 = 0 def function_solve(x) : x_set = [100, 86, 20] y_set = [80, 40 ,60] w_set = [425, 320, 220] value_default1 = 0 value_default2 = 0 for i in range(0, len(x_set), 1): delta_x = x[0] - x_set[i] delta_y = x[1] - y_set[i] delta_x_square = delta_x ** 2 delta_y_square = delta_y ** 2 value_default1 = value_default1 +w_set[i] * delta_x * ((delta_x_square + delta_y_square) ** (-0.5)) value_default2 = value_default2 +w_set[i] * delta_y * ((delta_x_square + delta_y_square) ** (-0.5)) return np.array([value_default1, value_default2]) #value_default1_square = value_default1 ** 2 #value_default2_square = value_default2 ** 2 #print(value_default1) #print(value_default2) #result_assumption = root(function_solve, [0, 0]) result = fsolve(function_solve, [0, 0]) #result = solve([value_default1, value_default2], [x, y]) print("[x, y] = " + str(result))
-
多元二次非线性方程组求解
2018-09-18 22:34:16通过牛顿方法解决多元二次非线性方程(根据数学分析书内容),将程序分为函数值求解,雅各比矩阵求解,线性方程组牛顿求解和主程序三部分,线性方程组求解采用高斯列消元方法。如果有需要,函数和雅各比矩阵需要按需... -
易语言-解线性方程组(即多元一次方程)
2021-06-25 17:04:26使用易语言的画板为基础,战斗方式为回合制,你砍我一刀,我捅你一剑的那种,其中的动画部分有人物跳起来攻击的,为了解决计算抛物线表达式y=ax2+bx+c的值,花了一个晚上研究出来了解三元一次方程的函数,后来索性... -
matlab多元多次方程组求解咨询
2021-04-23 08:21:22%%代码:m文件代码:function eq=myfun(Vd0,Vd1,Vd2,Vd3,Vd4,Vc2,Vc3,Vc4,Vc5,Vb1,Vb2,Vb3,Vb4,Pd1,Pd2,Pd3,Pd4,Pc1,Pc2,Pc3,Pc4)syms Vd0 Vd1 Vd2 Vd3 Vd4 Vc2 Vc3 Vc4 Vc5 Vb1 Vb2 Vb3 Vb4 Pd1 Pd2 Pd3 Pd4 Pc1 Pc...%%代码:m文件代码:
function eq=myfun(Vd0,Vd1,Vd2,Vd3,Vd4,Vc2,Vc3,Vc4,Vc5,Vb1,Vb2,Vb3,Vb4,Pd1,Pd2,Pd3,Pd4,Pc1,Pc2,Pc3,Pc4)
syms Vd0 Vd1 Vd2 Vd3 Vd4 Vc2 Vc3 Vc4 Vc5 Vb1 Vb2 Vb3 Vb4 Pd1 Pd2 Pd3 Pd4 Pc1 Pc2 Pc3 Pc4
%%global Vd0 Vd1 Vd2 Vd3 Vd4 Vc2 Vc3 Vc4 Vc5 Vb1 Vb2 Vb3 Vb4 Pd1 Pd2 Pd3 Pd4 Pc1 Pc2 Pc3 Pc4
g=9.8
de=0.25
Cd=0.9
Cc=0.2
P0=100000
Ab=48
Ad=60
Ac=60
H=1.5
Kd=1.5
Kc=2.5
Kb=0.2
N=4
Vc1=0
Vc0=0
Vb0=0
Pd0=101000
Pc5=101000
eq(1)=Vc1+(Ab/Ac)^2*Vb1-Vc2;
eq(2)=Vc2+(Ab/Ac)^2*Vb2-Vc3;
eq(3)=Vc3+(Ab/Ac)^2*Vb3-Vc4;
eq(4)=Vc4+(Ab/Ac)^2*Vb4-Vc5;
eq(5)=Vd0-(Ab/Ad)^2*Vb0-Vd1;
eq(6)=Vd1-(Ab/Ad)^2*Vb1-Vd2;
eq(7)=Vd2-(Ab/Ad)^2*Vb2-Vd3;
eq(8)=Vd3-(Ab/Ad)^2*Vb3-Vd4;
eq(9)=(Ab/Ad)^2*Vb4-Vd4;
eq(10)=Vc5-Vd0;
eq(11)=0.5*de*Vd0^2*Kd+de*(Vd1^2-Vd0^2)*(1-0.5*Cd)-Pd0+Pd1;
eq(12)=0.5*de*Vd1^2*Kd+de*(Vd2^2-Vd1^2)*(1-0.5*Cd)-Pd1+Pd2;
eq(13)=0.5*de*Vd2^2*Kd+de*(Vd3^2-Vd2^2)*(1-0.5*Cd)-Pd2+Pd3;
eq(14)=0.5*de*Vd3^2*Kd+de*(Vd4^2-Vd3^2)*(1-0.5*Cd)-Pd3+Pd4;
eq(15)=0.5*de*Vc1^2*Kc+de*(Vc2^2-Vc1^2)*(1-0.5*Cc)-Pc1+Pc2;
eq(16)=0.5*de*Vc2^2*Kc+de*(Vc3^2-Vc2^2)*(1-0.5*Cc)-Pc2+Pc3;
eq(17)=0.5*de*Vc3^2*Kc+de*(Vc4^2-Vc3^2)*(1-0.5*Cc)-Pc3+Pc4;
eq(18)=0.5*de*Vc4^2*Kc+de*(Vc5^2-Vc4^2)*(1-0.5*Cc)-Pc4+Pc5;
eq(19)=0.5*de*Vb1^2*Kb+de*g*H-Pd1+Pc1;
eq(20)=0.5*de*Vb2^2*Kb+de*g*H-Pd2+Pc2;
eq(21)=0.5*de*Vb3^2*Kb+de*g*H-Pd3+Pc3;
eq(22)=0.5*de*Vb4^2*Kb+de*g*H-Pd4+Pc4;
end
%%
运行代码:
clear
clc
x0=[0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,100000,100000,100000,100000,100000,100000,100000,100000]
fsolve(@myfun,x0,optimset(\'Display\',\'on\'))
XX=[Vd0 Vd1 Vd2 Vd3 Vd4 Vc2 Vc3 Vc4 Vc5 Vb1 Vb2 Vb3 Vb4 Pd1 Pd2 Pd3 Pd4 Pc1 Pc2 Pc3 Pc4]\'
%%
一共21个未知数。每次求解都有错误:
Warning: Trust-region-dogleg algorithm of FSOLVE cannot handle non-square systems;
using Levenberg-Marquardt algorithm instead.
> In fsolve at 324
??? Undefined function or method \'full\' for input arguments of type \'sym\'.
Error in ==> levenbergMarquardt at 67
costFun = full(costFun);
Error in ==> fsolve at 385
[x,FVAL,JACOB,EXITFLAG,OUTPUT,msgData] = ...
%%
已经改了好久了每次都有各种各样的问题,希望大神能帮我解决问题到能算出结果。。。
-
高次方程计算器
2015-10-25 11:37:42安卓软件,不占体积,可以进行高次方程计算,以分数输出答案,高次可以任意次 -
多元一次方程组解答工具
2013-05-04 14:34:30用于求解多元一次方程组,按照EXCEL提示输入各项系数即可求解 -
《非线性方程组求解及matlab实现》_matlab多元非线性方程组解法
2020-10-27 12:49:05Wegstein法注意事项 应注意如果x1和x2两点选择不当则连线的斜率等于1与直线y=x无交点从而迭代无法进行这就是Wegstein法应当避免的陷井引入一个量C Wegstein法注意事项 令q1-C 当q0时Wegstein法退化为简单的不动点... -
求多元解线性方程组,线性方程组全部解,matlab
2021-09-10 21:06:28以一个四元非齐次线性方程组为例,给出了求解多元线性方程组的Matlab代码 -
c++ 牛顿迭代法求解多元多次方程组
2019-11-25 21:03:00再给出刚开始代码链接里面一个二元二次方程组的例子的源代码: //经典牛顿迭代法C++实现 #include #include #define N 2 // 非线性方程组中方程个数、未知量个数 #define Epsilon 0.0001 // 差向量1范数的上限 #... -
解线性方程组(即多元一次方程)-易语言
2021-06-12 01:23:04的画板为基础,战斗方式为回合制,你砍我一刀,我捅你一剑的那种,其中的动画部分有人物跳起来攻击的,为了解决计算抛物线表达式y=ax2+bx+c的值,花了一个晚上研究出来了解三元一次方程的函数,后来索性优化了一下,... -
fslove - Matlab 求解多元多次方程组
2021-04-29 01:52:02fslove - Matlab 求解多元多次方程组简介: 之前看到网上的一些资料良莠不齐, 各种转载之类的, 根本无法解决实际问题, 所以我打算把自己的学到的总结一下, 以实例出发讲解 fsolve.示例如下:\[ \begin{cases} 2x_1 - x... -
java 怎么解多元一次不定方程组
2021-03-17 14:20:01多元一次不定方程的强力算法---同余筛数法uniqueleion6152018-10-24Python100例——第五章----不定方程的解wdt338516542013-07-19高斯消元求解多元一次方程组nikelong021632016-03-26二元一次不定方程的快速解法... -
C语言解多元一次方程组(矩阵法)
2021-05-20 19:23:40C语言解多元一次方程组(矩阵法)发布时间:2016年06月08日 评论数:抢沙发阅读数:2560#include #include #define Han 200//(可自设)多元一次方程组有n行n+1列(多的一列是等号右边的值),给出行数就能确定矩阵,#... -
JS求解三元一次方程组值的方法
2020-10-20 17:30:49主要介绍了JS求解三元一次方程组值的方法,涉及JS数学运算的相关操作技巧,需要的朋友可以参考下 -
多元非线性方程组求解(牛顿迭代法,含matlab代码)
2018-11-18 22:02:02多元非线性方程组求解(牛顿迭代法,含matlab代码) -
多元一次方程组计算器——环星多元线性方程组计算器0.89β
2010-10-23 11:03:38环星多元线性方程组计算器0.89β 界面操作简单,利用线性代数的知识解多软一次方程组 -
解二元一次方程组(可以扩展至解多元多次方程组)
2017-10-02 23:42:13解二元一次方程组(可以扩展至解多元多次方程组)解二元一次方程组(可以扩展至解多元多次方程组)解二元一次方程组(可以扩展至解多元多次方程组)解二元一次方程组(可以扩展至解多元多次方程组) -
多元一次方程组的求解
2021-03-16 01:44:20End Sub Private Sub Command1_Click() Dim Param(3, 4) ' 三元一次方程组 Dim i As Integer For i = 1 To 4 Param(1, i) = Choose(i, 1, 1, 1, 6) ' x1+x2+x3=6 Param(2, i) = Choose(i, 2, -1, 3, 5) ' 2x1... -
使用Excel解多元一次方程组的三种方法
2021-07-28 07:16:48本文列出了使用Excel中解多元一次方程组的三种方法:矩阵解法、用克莱姆法则和用规划求解的方法。方法一:矩阵解法原理:对于由n个未知数,n个方程组成的多元一次方程组:写成矩阵形式为Ax=b,其中A为系数n*n方阵,x... -
多元一次方程组的三种算法
2013-09-07 15:57:38多元一次方程组(二元一次方程组,三元一次方程组,四元一次方程组等)的三种算法,是本人在myeclipse10下编写出来的,并测试成功,很方便调用。希望带给大家惊喜~~ -
请教如何用matlab求多元二次方程组?
2021-04-21 06:27:51吾觉得要手工计算代入,求出一元高次方程,再用roots求解,或者直接用solve求解.[x1,x2,x3]=solve('x1+x2*x3+x3=100','x1-x2+2*x3=90','x1*x3+x2*x3=300')结果是:x1 =-(1/6*(558900+60*i*6884535^(1/2))^(1/3)+1160/... -
用神经网络解多元非线性方程组 (1997年)
2021-05-24 13:45:56给出前人人工神经网络逼近性理论,得到用人工神经网络可逼近任意给定的连续函数,并通过计算机对一些非线性函数进行模拟,模拟结果表明这种方法的可行性,给出用人工神经网络解多元非线性方程组的原理。 -
求用C#编程实现:求一个多元一次方程组解
2021-05-20 19:23:43满意答案yujiabian2013.11.14采纳率:54%等级:12已帮助:17454人高斯消元 再代回原方程求解算法如下_rows是指方程组行数;_cols是列数void gaoss(double[,]a)//高斯消元求未知数X,{string print = "";int L = _rows... -
matlab求解多元一次方程组
2020-12-27 10:41:13matlab求解多元一次方程组 问题定义: a11x1+a12x2+…+a1nxn=b1a21x1+a22x2+…+a2nxn=b2⋯am1x1+am2x2+…+amnxn=bm \begin{aligned} &a_{11} x_{1}+a_{12} x_{2}+\ldots+a_{1 n} x_{n}=b_{1}\\ &a_{21} x_{1...