帮忙写一个Matlab的子程序,解方程!

我请分析下,帮忙写一个Matlab的子程序,解方程!?

比如有方程f=f(x),g=g(x),a<x<b,且f,g在[a,b]上连续可导。现在要求出f(x)=0在[a,b]上所有的根,并代入g=g(x),取使g最小的那个根作为方程f(x)=0的所求根。
要求:
1、使用f=f(x)的导函数df=df(x),使df(x)=0;
2、求出df(x)=0在[a,b]上所有的根x1,x2,x3,……,如果df(x)=0在[a,b]无解,直接进行第4步;
3、将a,x1,x2,x3,……,b按从小到大的顺序排列;
4、然后分别判断f(x)在a,x1,x2,x3,……,b点的值,然后选择相邻两点用二分法求出f(x)=0的数值解;
5、将所得的解代入g,并比较,取一个最小的g,并将那个使g取得最小值的点x作为方程f(x)=0的最终根;
6、如果f(x)=0在[a,b]上无解,则给x赋值为一个极大的值。
我自己已经解决了,在选择最小值问题上,只需要对二维数组进行排序,就可以很方便的求出最小值;
而在求导函数的方程时,可以用solve解决,然后去掉虚根,合并重复的根,就可以得到实根的个数和值。
最新回答
哊姿姷菋

2024-10-03 01:40:13

clc
clear all
a=-50;
b=50;
g=[];
x0=solve('x^4+2*x-5=0','x');
for i=1:length(x0)
if isreal(x0(i))
else
x0(i)=0;
end
end
s=single(x0(find(x0~=0)));

for d=1:length(s);
if b>s(d)>a
g(d)=s(d)^2-1;
end
end
jie=s(find(g==min(g)))
disp('方程f(x)的解是');
jie
%已上是f=f(x),g=g(x),a<x<b,且f,g在[a,b]上连续可导。现在要求出f(x)=0在[a,b]上所有的根,并代入g=g(x),取使
%g最小的那个根作为方程f(x)=0的所求根 f(x)=x^4+2*x-5 g(x)=x^2-1
初遇

2024-10-03 14:28:06

syms x y b b1 b2 a1 a2
f1=('b1-b*cos(x)*cos(y)=0');
f2=('b2-b*cos(x+a1)*cos(y+a2)=0');
[x,y]=solve(f1,f2,x,y)

但是得不到结果,结果为:
??? Error using ==> solve
Error, (in allvalues/rootseq) cannot evaluate with symbolic coefficients

Error in ==> C:\MATLAB6p5\toolbox\symbolic\@sym\solve.m
On line 49 ==> [varargout{1:max(1,nargout)}] = solve(S{:});

意思是:不能计算出解析解!