matlab中一个函数有常数,在MATLAB中使用带有常量参数的内联函数

1) Why do I have to pass p to v even though p is a constant which has already been declared?

好吧,MATLAB的内联函数对象有一个eval包装器,因此其范围内唯一的变量是从表达式自动捕获或显式指定的变量.

换句话说,如果您希望v识别p,则在创建内联对象并将其明确传递给v时,您没有其他选项可以声明它. f也是如此!

2) How I can get an expression for v completely in terms of t as 3*[(50*t+2)*sin(50*t+2)] or in its simplified form?

使用匿名函数,如Shai建议的那样.它们更强大,更优雅,更快.例如:

v = @(t)(3*(50*t+2)*sin(50*t+2))

请注意,如果您使用已由变量使用的名称作为参数,则匿名函数将首先将其视为参数.它确实看到了范围内的其他变量,因此也可以执行类似g = @(x)(x p)的操作.

编辑#1:

这是另一个例子,这次是函数的一个函数:

x = 1:5;

f = @(x)(x .^ 3); %// Here x is a local variable, not as defined above

g = @(x)(x + 2); %// Here x is also a local variable

result = f(g(x));

或者另外定义另一个实现它的函数:

h = @(x)f(g(x)); %// Same result as h = @(x)((x + 2) .^ 3)

result = h(x);

输出应该是相同的.

编辑#2:

如果要从表达式字符串中创建匿名函数,请将“@(x)”(或正确的匿名标题,如您所见)连接到开头并应用eval,例如:

expr = '(x + 2) .^ 3';

f = eval(['@(x)', expr]) %// Same result as f = @(x)((x + 2) .^ 3)

请注意,您也可以将char(f)转换回字符串,但您必须手动删除’@(…)’部分.

编辑#3:

如果您正在寻找其他解决方案,可以浏览Symbolic Toolbox.例如,尝试:

syms x

f(x) = x + 2

g(x) = x ^ 3

或者也可以使用sym,如下:

f(x) = sym('x + 2');

g(x) = sym('x ^ 3');

使用subs替换值并评估符号表达式.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值