matlab - 当我使用积分函数时,Matlab 没有给出结果
问题描述
当试图计算两个变量的积分时,我什么也没得到!
这是代码:
syms x;
a=0.4;
theta=(9 - 4*x*(5*x - 141/25))^(1/2)/2 - 3/2;
theta_prime=-(40*x - 564/25)/(4*(9 - 4*x*(5*x - 141/25))^(1/2));
g=(1/theta)*theta_prime
s=(1+a*(theta-1))*(g)^2
sgen = int(s,x,0.1,1) %x=0.1:0.1: 1
我的错误是什么?它应该是一个值,例如“4.86”。请指教。
解决方案
sgen
是一个符号对象,表示您的函数的积分s
。您可以将其转换为 double 以获得积分的数值:
syms x;
a=0.4;
theta=(9 - 4*x*(5*x - 141/25))^(1/2)/2 - 3/2;
theta_prime=-(40*x - 564/25)/(4*(9 - 4*x*(5*x - 141/25))^(1/2));
g=(1/theta)*theta_prime;
s=(1+a*(theta-1))*(g)^2;
sgen = double(int(s,x,0.1,1)) % returns 4.8694
但是,如果您对积分的符号方程不感兴趣,那么使用符号工具箱确实没有意义。数值计算积分要快得多。一种方法是创建一个函数s(x)
,然后使用它integral
来查找数值积分。请注意,s(x)
必须对x
变量进行矢量化才能使其工作(integral
将使用x
值向量调用它以节省时间)。对于矢量化计算,需要在一些*
,/
和^
运算符前面添加点。这是结果:
a = 0.4;
theta = @(x) (9 - 4*x.*(5*x - 141/25)).^(1/2)/2 - 3/2;
theta_prime = @(x) -(40*x - 564/25)./(4*(9 - 4*x.*(5*x - 141/25)).^(1/2));
g = @(x) (1./theta(x)).*theta_prime(x);
s = @(x) (1+a*(theta(x)-1)).*g(x).^2;
sgen = integral(s,0.1,1.0) % returns 4.8694
推荐阅读
- java - 确定空通配符集合的类型(例如 List )
- c - 对变量和常量的操作在 c 中给出不同的结果
- html - 如何从来自自身的标签?
- python-3.x - python 3中的解包语法
- html - Angular5 mat-menu 修改填充和宽度属性?
- java - 从命令行启动单个 Serenity 场景
- reactjs - react navigation v3 通过 AppContainer 设置 screenProps
- android - 使用 for 循环根据用户输入创建 GridView
- amazon-web-services - Lambda 无法访问 KMS 密钥
- r - 来自超过 2 列的数据框的成对因子/分类变量列联表