Matlab中实现函数的符号变量

来源:互联网 发布:哑铃健身软件2015 编辑:程序博客网 时间:2024/05/17 18:42

今天在做matlab编程的时候,遇到一个问题就是:需要实现一个高次二元函数,在此基础上,探讨其中一个参数的变化,对最后高次一元方程解变化的影响。举个简单例子来说就是实现f(x,y),通过一个循环不断的给x赋值,探讨f(,y)=0高次一元方程解的变化情况。但是实现起来的时候,发现没有什么这样的函数,一般也没有听说过matlab可以用向量去存储函数表达式,因而最后借助了sym函数变量实现了,实现得有点复杂,主要是对于sym变量类型不是太了解。

   如下写的一个函数,不传入参数,实现了函数参数两步带入求解。该例子实现了化学平衡中探讨pH和离子浓度的关系。
<span style="font-family:SimHei;font-size:14px;">function [n,c]=f()syms x;b=zeros(56,4);      //初始化,存储实数解    for i=0:1:56;      m=10^(-14+i/4);         y=(x)+(x)*10^4*m+(x)*10^4.4*m^2+(x)*10^8.5*m^3+(x)*10^9.7*m^4+2*(x^2)*10^4.7*m*0.01+4*(x^4)*10^27.5*m^4*0.01^3-1;     n(i+1)=-log10(m);     a=solve(subs(y),0.1);   // 上述y是一个表达式,通过subs()函数实现了一种在符号计算和数值计算之间的转化,转化之前是符号。     a=a';       a=double(a);    //强制转化a变量的值类型,转化之前由于涉及到复数,是sym类型,不好处理;         for j=1:1:length(a)             if(isreal(a(j)))                    b(i+1,j)=a(j);                else                 continue;             end         end    end c=b(:,1); c=c'; plot(n,c,'-ks','LineWidth',2,...                'MarkerEdgeColor','k',...                'MarkerFaceColor','r',...                'MarkerSize',8);xlabel('pH');ylabel('[Co+]');end</span>
   下附求解算出来的图像,随着pH的增大,水溶液中的钴离子的变化;
    
0 0