
% 如果 a,b 作为符号带入,没有闭合解,所以必须先将 a,b 赋值后才能求解
syms x ya =1; b = 1;
ex1 = y(100-x)/(b-y-x)^2-236010^11;
ex2 = (x-b)(100-x)/(a-b-x+y)(b-y-x)-872810^14;
[x,y] = solve(ex1,ex2,'x,y');
x = vpa(x,4)
y = vpa(y,4)
x =
5000
5000
2912e11
7550+2912e11i
-2912e11
7550-2912e11i
y =
5000
5000
-2912e11
-7450-2912e11i
2912e11
-7450+2912e11i
function f=myfun(x)
f=x(1)+x(2)+81;
end %%函数,其中x=x(1)y=x(2)
function [c,ceq]=mycon(x)
c(1)=100000-x(1)x(2);
c(2)=1-x(1);
c(3)=1-x(2);
ceq=[];
end %%条件
clc,clear all
x0=[400 ;400];
[x,fval]=fmincon(@myfun,x0,[],[],[],[],[],[],@mycon)
x =
3163406
3161150 %即x=y等于这个数时最小
fval =
7134556 %最小值为这个值
matlab求解最优解,用遗传算法ga可以得到理想的最优解,而用fmincon()函数求解其最优解不够好。
用ga()函数求解过程与fmincon()函数相类似,其方法
1、建立目标函数
function f =ga_fun(x)
f=6327x(1)+4503x(2)+2021x(3)+3952x(4)+1932x(5);
2、然后,执行下列命令
[x,fval,exitflag] = ga(@ga_fun,5)
3、运行结果为
x = 0018022 0035809 000070699 0029036 0012984
fval = 04165
完整代码,可以私信给出。
(1)第一问直接构造函数mycos
mycos= @(x,n) sum((-x^2)^(0:1:n-1)/factorial(2(0:1:n-1)));% n+1是项数y = mycos(041423,35)
结果
y =09154
(2)直接构造函数myln1px
myln1px = @(x,n)sum(x(-x)^(0:1:n)/(1:1:n+1));y = myln1px(0618,30)
结果
y =04812
(3)函数如下
function y = prifac(n)if(isprime(n))
y = n;
else
y = [];
p = primes(floor(n/2));
for i = 1:1:numel(p)
while(mod(n,p(i))==0)
n = n/p(i);
y = [y,p(i)];
end
end
end
end
例子
>> prifac(201810)ans =
2 3 5 7 31 31
fsolve不行你可以试试fzero,另外,程序总是采用就近搜索的办法求解的,所以解的情况和你的初始值很有关系,再说你这里还有tan函数,搞不好你取了个初始值导致它迭代到90度附近的区域也未可知。你最好还是说下具体报的什么错比较好,这样有针对性。下面是我给的一个函数程序:
function
a
=
myfun(t,h,h,k,c,x0)
%
x0
is
initial
point
g
=
@(ksi,t,h,h,k,c)
sqrt(3)/4h/k/htan(h^2k(ct-ksi))-ksi;
a
=
fzero(@(ksi)
g(ksi,t,h,h,k,c),x0);
这就是函数的m文件内容,你把它存到当前目录下,然后运行myfun,输入你的参数数值就行了。我简单试了myfun(98,1,2,3,4,5),可以算,-00032。
如果求函数在区间内的最小值,可以用fminbnd。
但如果限定x是整数,可以直接求出所有点的函数值来,然后用min来求。
参考代码:
f=@(x)100000/x+333x;x0=fminbnd(@(x)100000/x+333x,1,100)
ezplot(f,[1 100])
hold on;
plot(x0,f(x0),'ro')
x=1:100;
y=f(x);
[ymin,inx]=min(y);
plot(x(inx),ymin,'ms')
axis auto
xlim([15 20])
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)