1. 如何使用matlab的指数函数进行运算?
1、首先需要知道matlab中使用exp(1)表示e,使用exp(x)表示e的x次方,如下图所示。
2、打开matlab,在命令行窗口中输入exp(1),可以看到结果为2.7183,e的值大约为2.7183,如下图所示。
3、输入exp(10)表示e的10次方,如下图所示。
4、输入exp(20)表示e的20次方,x次方需要x数字就可以,如下图所示。
5、最后可以看一下matlab中exp指数函数的用法,如下图所示就完成了。
2. 用matlab求指数函数
对于这类拟合问题,应按下列步骤进行:
1、建立自定义函数文件 myfunc.m
2、建立执行文件 myfile.m
3、在命令窗口下执行myfile
>> myfile (回车)
4、运行结果
beta =
0.9941 2.0022 -2.6757
即a=0.9941, b=2.0022, c=-2.6757
[y' y1'] %实际值与拟合值对比
ans =
2.9970 2.9963
2.4800 2.4814
2.1010 2.0989
1.8150 1.8148
1.6000 1.6037
1.4470 1.4469
1.3340 1.3305
1.2410 1.2440
1.1830 1.1797
1.1300 1.1320
存在问题:fminsearch()函数是不能用于拟合函数的,它用于求函数的极值问题。
具体代码详见附件。
3. matlab中指数函数怎么表示
y=exp(x)
方法一:比如任意定义函数如下:function r=ff(x) r=sin(x);定义一个求积分的函数integr(),函数如下定义:function result=integr(a,b,n,fun) ;h=(b-a)/n; x=[a:h:b]; y=fun(x);%fun为传入的函数指针,可以直接作为引用result=sum(y);则可以通过如下方式使用:integr(0,1,1000,@ff)%‘@’即表示ff作为函数指针传入,有时也叫做函数句柄。
方法二:把f(x)函数名作为字符串传入,则在Integr()中只需将f(x)函数名及其参数写为一个字符串,使用eval(字符串)执行即可,如:function result=integr(a,b,n,fun)%定义积分函数,a为积分下限,b为积分上限,n为划分区间的个数,fun为需进行计算的函数的文件名h=(b-a)/n; x=[a:h:b]; y=eval([fun,'(x)']);%将函数名fun和其参数x合成一个字符串并执行字符串,即执行计算fun(x),注意不能丢了fun的括号。result=sum(y);在命令窗口引用即可:将'ff'换为其他函数名字符串即可进行计算其数值积分。integr(0,1,1000,'ff')001时停止,分别用for和while 结构实现。
matlab中指数函数拟合 。如:x=0.25,0.5,1,1.5,2,3,4,6,8
y=19.21,18.15,15.36,14.10,12.98,9.32,7.45,5.24,3.01
步骤:数据点应该近似服从指数分布
General model Exp1:
f(x)=a*exp(b*x)
Coefficients(with 95% confidence bounds):
a=20.25(19.53, 20.96)
b=-0.2416(-0.2615, -0.2216)
Goodness of fit:
SSE:1.147
R-square:0.9956
Adjusted R-square:0.995
RMSE:0.4049
4. 请问如何用matlab求解指数方程?方程如下
我觉得你方程有误。 。。。+2.5=0,+2.5前应该为-2.5时才有解。
从图形看,有两个解,即
k=-9.3916;3.9806
求解方法:
func=@(k)1.2816*1.1*(exp(0.2556*k) - exp(0.2556*(k - 1)))+1.3423*0.71*(exp(0.3164*k) - exp(0.3164*(k - 1)))+1.5987*(-6.6)*(exp(-0.0929*k) - exp(-0.0929*(k - 1)))-2.5;
x0=7.3525
[x,fval,exitflag] = fsolve(func,x0)
x0=-7.3525
[x,fval,exitflag] = fsolve(func,x0)
5. matlab中怎么输入指数
方法和详细的操作步骤如下:
1、第一步,打开matlab后,直接在命令窗口中输入e,然后按Enter键确认,可以看到显示了未定义的变量,见下图,转到下面的步骤。
2、第二步,执行完上面的操作之后,基于e的指数函数,可以用exp(n)表示,在命令行窗口中的幂为e的五次幂,见下图,转到下面的步骤。
3、第三步,执行完上面的操作之后,要验证基于e的指数和对数函数表示,请在命令行窗口中输入log(exp(1))并按Enter键进行确认,可以看到结果为1,见下图,转到下面的步骤。
4、第四步,执行完上面的操作之后,继续在命令行窗口中输入log(exp(2)),按Enter键进行确认,可以看到结果为2,见下图,转到下面的步骤。
5、第五步,执行完上面的操作之后,如果仅表示e的自然数,则可以用exp(1)表示,在命令行窗口中输入,然后按Enter键确认以查看e的值接近2.7183,见下图,转到下面的步骤。
6、第六步,执行完上面的操作之后,以e为底的对数函数可以用log(n)表示。例如,如果在命令窗口中输入log(10),则按Enter键以得到结果2.3026,见下图。
6. matlab画指数函数曲线
说明
这个问题和另外两个问题(编号2051722037141864067、1638082848257894860)基本上是重复的,我已经在那两个问题做了回答,主要原因是匿名函数f0在x比较大、s比较小的情况下会出现非数NaN,导致计算失败。更具体的分析与解决方法这里不再重复,感兴趣的请自行查阅(因度娘经常抽风,就不贴链接了,把编号的数字复制替换本问题的地址中question后面的那一串数字即可)。
这里再对两个问题做进一步探讨:一是对出现NaN的原因做更深入分析,二是把积分下限换成0.1的误差分析。
1、结果中出现NaN的原因
之前分析过(参见问题2051722037141864067),之所以不能画图,归根到底是由于f0在某些条件下计算结果出现NaN引起的,而NaN又是由于指数项为0、Bessel函数为无穷大导致的。
■ 对于指数函数exp(-x),在什么条件下结果为0?
负指数函数是x的减函数,从数学的角度来说,函数值会逐渐衰减趋近于0,但只要x是有限值,函数值就不真正为0。但从数值在计算机内的表示来说,双精度浮点数只有8个字节,其表示精度与范围都是有限的,可以判断,x为某个有限值的时候,函数值就会小于最小的正浮点数,也就是数值意义上0。
最小的正浮点数可以用realmin获得,但请注意,这个是所谓规格化(normalized)浮点数,而不是最小的浮点数,最小的浮点数是eps(realmin)(或eps*realmin):
>> realminans = 2.225073858507201e-308>> eps(realmin)ans = 4.940656458412465e-324所谓normalized,是指大于该浮点数的运算能够保证精度,一旦小于realmin,被称为IEEE "denormal",不能再保证运算精度。例如:
>> eps(realmin)/2ans = 0>> eps(realmin)/1.99ans = 4.940656458412465e-324我们看到,这个最小的浮点数除以1.99仍然等于其自身,除以2则等于0。事实上,这个数的浮点数表达只有最后一个bit是1,其它63bit都是0,一旦除以2或更大的数,就会得到全0的八个字节,也就是0。
了解了最小的浮点数,也就可以知道使得exp(-x)数值上达到0的x值了:
>> x=-log(eps(realmin))+log(2)x = 745.1332>> exp(-x)ans = 4.9407e-324>> exp(-745.1333)ans = 0也就是说,这个数稍大于745。
■ Bessel函数什么条件下为无穷大?
这个有点遗憾,由于Bessel函数不像exp那样有逆函数可用,使得besseli(0,x)为无穷大的x我只能通过试探大致确定在700-701之间:
>> besseli(0,700)ans = 1.5296e+302>> besseli(0,701)ans = Inf当然,可以通过进一步的试探确定更多的有效数字:
>> besseli(0,700.9217936944459)ans = 3.8426e+302 >> besseli(0,700.921793694446)ans = Inf
■ 函数避免出现NaN的条件
指数项包括两部分,仅以其中一项为例(未包含负号):
ezplot(@(v)(log(v) - u).^2./(2*d0),[0 0.1])
可以看到,在v比较小时,仅此一项就会让负指数函数的值为0。另外一项对应的指数也是负数,对应的函数值小于1。可以通过下面的方法大致看到
ezmesh(@(v,x) -((log(v) - u).^2./(2*d0))-(k +1)*x.^2./v.^2,[0 0.1 0 15])zlim([-750 0])view(0,90)
空白区域即意味着指数小于-750,也就是函数值为0。可见,指数项除了在小部分区域外,大多数条件下的函数值为0,这样,为了避免出现0*Inf,重点在于防止Bessel函数出现无穷大的值。而即使指数部分不为0,一旦Bessel函数值为Inf,两项相乘的值为Inf,计算结果同样没有意义。
看一下Bessel函数的变量:
ezplot(@(v,x) 2*x*sqrt(k*(k+1))./v - 700,[0 0.1 0 50]) axis auto
图中曲线的含义是,当v取某个值的时候,x只有小于特定值,Bessel函数才为有限值。这个值大约是对应v=0.01,x=4.04;v=0.1,x=40.4,也就是说,对于v=0.01,只能计算大约x<4.04范围的Bessel函数,v=0.1时,可计算范围大约是x<40.4。
这个结论和之前的分析吻合。另一方面,我们可以看到,如果只需要画x=0~15区间的积分函数,可以取积分下限为0.04。
2、把积分下限换成0.1的误差分析
按照问题1638082848257894860的分析,把积分下限进行微调成0.1,对于大部分的函数值没有影响。现在具体看看误差有多大。
由于只是对积分限进行微调,所以需要考虑的只是被积变量v在0~0.1区间f0函数的情况。这里按照sigma=1来分析(如果按照本题的s分析,几乎没有误差,这一点也可以在问题1638082848257894860里面的曲线看到)。
画出x取不同值的f0-v曲线:
ezplot(@(v)f0(v,0),[0 0.1])hold onezplot(@(v)f0(v,0.01),[0 0.1])ezplot(@(v)f0(v,0.05),[0 0.1])ezplot(@(v)f0(v,0.1),[0 0.1])axis auto
可以看到,x=0对应的曲线值是最大的(应该可以从理论上证明),但最大值也是有界的。对积分下限进行微调导致的误差不会超过这部分积分再乘一个相应的系数。
限于时间精力,这部分的分析未能进一步深入。写了也没几个人看,就先这样吧。
最后,对积分下限取0.01和0.1的误差进行比较:
x = 0:0.01:0.5;df = arrayfun(@(x)integral(@(v)f0(v,x),0.01,inf),x) - arrayfun(@(x)integral(@(v)f0(v,x),0.1,inf),x);f = (2*(k+1)*exp(-k)*x.*df)./(sqrt(2*pi*d0));plot(x,f,'r');
这也和之前分析的吻合,即只在x比较小的区间(大约0.2)才有一定误差。而取0.001和0.01的误差更小:
结束语
花费好几个小时写的分析,很大程度上和解决楼主所提问题本身已经没有太大关系,只是为了探究使用MATLAB可能出现的误差或异常现象的深层原因,以便在以后的应用中加以注意。
在此,向楼主提个请求,能否告知这个积分函数的应用背景?花了这么多时间研究这个问题,虽然只是出于个人的爱好,但我把这些拿出来分享的时候,希望能够知道这究竟是哪个领域的问题,谢谢。
这样可以么?
7. matlab计算函数值
T=-20:0.05:40;
RH=(0.4,1,length(T));
THI=T-0155*(1 -RH).*(T-1415)
8. matlab求函数的系数
a=0.1:0.1:0.2;%只打了两行,所以只到0.2
s=0.4:0.1:1;
[S,A]=meshgrid(s,a);
K=[0.2306e7 0.2977e7 0.3646e7 0.4347e7 0.5091e7 0.5865e7 0.6655e7;
0.2766e7 0.3861e7 0.4925e7 0.5993e7 0.7074e7 0.8196e7 0.9351e7;];
%只打了2行,受不了。。。
k=@(x,a,s) 18000000*(0.05*a).^0.5.*[x(1)+x(2)*(a)+x(3)*(a).^2].*[x(4)+x(5).*(s)]-K;
%b=x1,c=x2,d=x3,e=x4,f=x5
x=fsolve(k,[1 1 1 1 1],[],A,S)
2.1578 -0.6524 0.4811 -0.3727 2.8771
所以%b=2.1578 c=-0.6524,d=0.4811,e= -0.3727,f= 2.8771