Double "for loop" with an integral of hundle functions, problem.
1 次查看(过去 30 天)
显示 更早的评论
>> %assing two handle functions to a column with two rows
f1=@(t)3*t+1;
f2=@(t)1.5*t+0.5;
fcell=cell(2,1);
fcell{1}=f1;
fcell{2}=f2;
>> % gives me a 2x1 cell array, with @(t)3*t+1 in the first row
>> % and @(t)1.5*t+0.5 in the second row.
>> % I will use this cell array in a double "for loop" to produce something
>> C=sym(zeros(2,1));
for kk=1:2
for jj=1:2
C(kk)=C(kk)+integral(@(t)fcell{kk}(t),0,1);
end
end
>> % This, gives me 2 resaults, in a 2x1 sym. The first resault is :
>> C(1)
ans =
5
>> % and the second is :
>> C(2)
ans =
5/2
>> % My problem is that, actually, i have more than 10 handle functions (lets say 10), and
>> % i do not want to write each one, every time. I want to copy them (from another software) and
>> % past in an array (in Matlab). And then, use this array as a source to call these 10 functions in the
>> % double "for loop".
>> % But i cannot make an array of 10 cells, including the 10 hundle functions. They comes
>> % out as "sym". And this, couse problem when i use it in the double "for loop". It gives me
>> % errors like : ........The following error occurred converting from sym to double:
% Error using symengine (line 59)
% DOUBLE cannot convert the input expression into a double array.
% If the input expression contains a symbolic variable, use VPA.
% Any help please
0 个评论
采纳的回答
Torsten
2022-6-15
f=@(t)[-7*t+25 %insert (by copy and paste), in the [ ], 10 functions. (Copy %from another software)
140*t+-122
107*t+-56
385*t+-890
-546*t+2834
-72*t+464
-16*t+128
440*t+-3064
-256*t+2504
-142*t+1478
];
result = integral(f,0,1,'ArrayValued',1);
C=zeros(2,1);
for kk=1:2
for jj=1:2
C(kk)=C(kk)+result(kk);
end
end
C
4 个评论
Torsten
2022-6-18
编辑:Torsten
2022-6-18
f={@(t)-7*t+25 %insert (by copy and paste), in the [ ], 10 functions. (Copy %from another software)
@(t)140*t-122
@(t)107*t-56
@(t)385*t-890
@(t)-546*t+2834
@(t)-72*t+464
@(t)-16*t+128
@(t)440*t-3064
@(t)-256*t+2504
@(t)-142*t+1478
};
d = size(f,1);
lb = (0:d-1).'/d;
ub = (1:d).'/d;
ArrayOf_Int = zeros(d,1);
for i = 1:d
ArrayOf_Int(i) = integral(f{i},lb(i),ub(i));
end
C = 1.0;
jjfirst = 1;
jjlast = d;
expression = C*(4^(jjlast+1)-4^jjfirst)/3*sum(ArrayOf_Int)
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!