作业帮 > 综合 > 作业

matlab 匿名函数组的问题

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/15 18:53:10
matlab 匿名函数组的问题
我生成一个元胞数组,想在每一行中添加一个随着行数k变化的匿名函数,这样写结果却是每一个还是@(t,k)nchoosek(n-1,k)*t.^k.*(1-t).^(n-1-k),求问是怎么回事?
tmp=cell(n-1,1);
for k=1:n-1
tmp{k,1}=@(t,k)nchoosek(n-1,k)*t.^k.*(1-t).^(n-1-k);
end
tmp{k,1}=@(t,k)nchoosek(n-1,k)*t.^k.*(1-t).^(n-1-k);
这样写导致k也成了函数自变量,所以不对.
我猜测题主需要的是:
tmp{k,1}= @(t) nchoosek(n-1,k)*t.^k.*(1-t).^(n-1-k);
再问: 这样是没法for循环的,匿名函数好像不能直接调循环,我其实是算这个式子n次Bezier曲线拟合方程,n和Xi已知,我也不知道该怎么办

再答: "这样是没法for循环的"。为何没法循环?? 上面的式子相当于有n+1个函数相加,这些函数已经分别保存到上述元胞数组里了。我没看到任何问题。
再问: for循环后tmp每一个都是原始函数,k没有被赋值,运行出来就是这样啊
再答: "k没有被赋值" 请仔细严谨思考这句话。除非我的写法不合法,否则不可能k处于“没有值”的状态。您说呢? “运行出来就这样” 请给出您得出结论使用的测试程序和结果。
再问: 运行出来就是这样,怎么回事呢?

再答: 1. 在命令行里执行这种操作不是个好的主意,应该写一个脚本。2. 题主并没有给出实质性的“测试”。我的建议:% main.m
clear all; close all;
n = 20;
tmp=cell(n-1,1);
for k=1:n-1    
    tmp{k,1}=@(t)nchoosek(n-1,k)*t.^k.*(1-t).^(n-1-k);
end
results = zeros(n-1, 1);
for k = 1:n-1
    fun = tmp{k};
    results(k) = fun(0.1);
end
plot(results)