如何在matlab中解2元函数。

如何在matlab中解2元函数。,第1张

% 如果 a,b 作为符号带入,没有闭合解,所以必须先将 a,b 赋值后才能求解

syms x y 

a =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])

 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/13493624.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存