我是靠谱客的博主 鲜艳草莓,最近开发中收集的这篇文章主要介绍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替换值并评估符号表达式.

最后

以上就是鲜艳草莓为你收集整理的matlab中一个函数有常数,在MATLAB中使用带有常量参数的内联函数的全部内容,希望文章能够帮你解决matlab中一个函数有常数,在MATLAB中使用带有常量参数的内联函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部