使用Matlab fsolve()查找具有2个变量的2个函数的零点

时间:2018-11-14 13:08:27

标签: matlab

使用Matlab尝试用2个变量求解2个方程。

我定义了两个函数 f2(n_1,n_2),f3(n_1,n_2),它们都依赖于 f1(n_1,n_2),然后我定义了向量化函数 G(n_1,n_2)包含两者。

稍后,我定义了所需的起点,并尝试解决。但是在运行代码时会引发我不完全理解的错误。

上面的代码显示在下面的代码中:

代码:

clear, close all; clc
%Const
N0=25;
G1=1;G2=1;
a1=6;a2=3;
k1=1;k2=4;
%main
syms n_1 n_2
X_0=[-5;5];
f1=N0-a1.*n_1-a2.*n_2;
f2=f1.*G1.*n_1-k1.*n_1;
f3=f1.*G2.*n_2-k2.*n_2;
G=@(n_1,n_2) [f2;f3];
s = fsolve(G,X_0);

错误:

Error using fsolve (line 269)
FSOLVE requires all values returned by functions to be of data type     double.

Error in Ex1_Q3_DavidS (line 37)
s = fsolve(G,X_0);

谢谢

1 个答案:

答案 0 :(得分:2)

fsolve是一个使用数值方法来查找数值函数根的函数。

例如,数字函数为f=@(x)x^2=2;。在MATLAB中,您可以对任意数字求f()的值,它将返回一个数字,但是没有更高阶的数学抽象。但是,这不是在计算机中进行数学运算的最快方法,因为它不是更高的智能,而只是一个荣耀的计算器。

但是,有些人希望为计算机提供更高的智能,并编写非常复杂的符号工具箱,这些工具箱会使用规则集来尝试教计算机像半人类一样思考并求解符号方程,就像您在论文中所做的那样。为了解决这些方程,在MATLAB中引入了一个名为solve的函数。

您正在执行符号数学,但是正在使用数字求解器。它不起作用,只需将符号求解器用于符号数学即可。