How to write a function with logical condition which takes an array and turns back an array?

2 ビュー (過去 30 日間)
What I want to acheive is the following. Let's say I have the function if and .
I have two vectors with nodes: x and y and I would like to calculate the function mentioned abose as an array. I can do it straightforwardly as
A = zeros(length(x), length(y));
for i = 1 : length(x)
for j = 1 : length(y)
if (x(i) ~= y(j))
A(i,j) = sin(alpha*(x(i) - y(j))) / (alpha * (x(i) - y(j)));
else
A(i,j) = 1;
end
end
end
This way is not really fast. I would like to have a function that will produce similar output as this cycle. More precisely, I would like to have the output in the form which is applicable for the trapz() command to calculate the double integral after all
trapz(y, trapz(x, K, 2))
there K has been calculated previously
I was trying something loke this
function val = K(alp, x, y)
% [x, y] = meshgrid(x, y); %% I was trying different variants here
% [x, y] = ndgrid(x, y);
if (x ~= y)
val = sin(alp * (x - y)) ./ ( alp * (x - y) );
else
val = 1;
end
end
but, of course, it did not work. Could you tell me, please, how shall I rewrite this function to achieve what I mentioned?

採用された回答

Matt J
Matt J 2021 年 10 月 23 日
K=sinc(alpha/pi*(x-y.'));
  5 件のコメント
Matt J
Matt J 2021 年 10 月 23 日
編集済み: Matt J 2021 年 10 月 23 日
x = (1:5) / pi;
y = (3:7) / pi;
K = sin(pi * (x - y.')) ./ ( pi * (x - y.') );
K(x == y.')=1
K = 5×5
0.4546 0.8415 1.0000 0.8415 0.4546 0.0470 0.4546 0.8415 1.0000 0.8415 -0.1892 0.0470 0.4546 0.8415 1.0000 -0.1918 -0.1892 0.0470 0.4546 0.8415 -0.0466 -0.1918 -0.1892 0.0470 0.4546
Bogdan MP
Bogdan MP 2021 年 10 月 23 日
Thank you very much!

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLogical についてさらに検索

製品


リリース

R2018a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by