Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
4 / 4 / 0
Регистрация: 19.05.2021
Сообщений: 9

Интегрирование анонимных функций (матлаб R2023а)

14.01.2024, 13:52. Показов 567. Ответов 4

Студворк — интернет-сервис помощи студентам
Нужна помощь... Есть задание в матлаб вывести два графика: 1.тактическое планирование, 2.стратегическое планирование, применив к функции f(x) интегрирование и запихнув в анонимную функцию(по-другому задание не выполняется и дали прямой намёк, что нужно делать именно так). Погуглив, поизучав, пришёл к такому коду, но он не хочет работать
Matlab M
1
2
3
4
5
6
7
8
9
10
11
fun = @(b, c) (integral(@(x) (B(j).*x.^(B(j) - 1)/A(i).^B(j).*exp(-x/A(i).^B(j))), b, c));
for i=1:N1,
    for j=1:N2,
        an(i)=2*(A(i)-minf(1))/(maxf(1)-minf(1))-1;
        bn(j)=2*(B(j)-minf(2))/(maxf(2)-minf(2))-1;
        %  
        Yc(j,i)=b_(1)+an(i)*b_(2)+bn(j)*b_(3)+an(i)*bn(j)*b_(4);
        %  
        Yo(j,i)=fun(0.5, 5);
    end;
end;
Есть и второй вариант реализации, который вроде бы правильнее, но в первом программа выполняется и не обращает внимание на параметры плюс графики сильно разные, неважно что в диапазоне написать, а во втором варианте выдаёт ошибку:

Unrecognized function or variable 'c'.

Error in lab1 (line 64)
fun = @(x) B(j).*x.^(B(j) - 1)/A(i).^B(j).*exp(-x/A(i).^B(j)), b, c;
Matlab M
1
2
3
4
5
6
7
8
9
10
11
fun = @(x) B(j).*x.^(B(j) - 1)/A(i).^B(j).*exp(-x/A(i).^B(j)), b, c;
for i=1:N1,
    for j=1:N2,
        an(i)=2*(A(i)-minf(1))/(maxf(1)-minf(1))-1;
        bn(j)=2*(B(j)-minf(2))/(maxf(2)-minf(2))-1;
        %  
        Yc(j,i)=b_(1)+an(i)*b_(2)+bn(j)*b_(3)+an(i)*bn(j)*b_(4);
        %  
        Yo(j,i)=integral(fun, 0.5, 5)
    end;
end;
матлаб версии R2023a

Добавлено через 2 минуты
Пробовал изменять строчки в Yo(j,i)=fun(0.5, 5) на fun(i, j), но от этого сильно лучше не становится и нужен именно диапазон конкретных значений
Мнение, что неправильно написана именно первая строчка, а из-за неё возможно и девятая
Если нужно, могу кинуть весь код вместе с systemeqv.m

Вот пример выполнения программы, если действовать по первому примеру и изменение параметров не влияют на графики
Миниатюры
Интегрирование анонимных функций (матлаб R2023а)  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.01.2024, 13:52
Ответы с готовыми решениями:

Численное интегрирование в Матлаб с функцией Бесселя
Задача в том, чтобы построить вероятность, плотность распределения таким образом: \int_{C}^{Inf} {e}^{-\frac{{x}^{2}+{q}^{2}}{2}}...

Интегрирование в Матлаб. Найти площадь под кривой
Здравствуйте, ребята! Появилась такая сложная задача, вроде бы не очень сложная, а на самом деле оказалась сложной задачей. Есть два...

Понимание анонимных функций
Доброе время суток. Имеется делегат: delegate void StudentListHandler(object source,StudentListHandlerEventArgs args); Событие,...

4
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
15.01.2024, 06:53
dennyoff, вы неправильно в первом варианте задаёте анонимную функцию: не указываете в начале переменную х, а только а и b.
В цикле вычисление an(i) можно вынести на место перед циклом j.
Однако, вместо циклов лучше использовать работу с массивами, так и писанины меньше получится, и считать быстрее будет.
Matlab M
1
2
3
4
5
6
[a,b]=meshgrid(A,B);
fun=@(x)a.*x.^(b - 1)./a.^b.*exp(-x./a.^b);
an=2*(a-minf(1))/(maxf(1)-minf(1))-1;
bn=2*(b-minf(2))/(maxf(2)-minf(2))-1;
Yc=b_(1)+an*b_(2)+bn*b_(3)+an.*bn*b_(4);
Yo=integral(fun, 0.5, 5,'ArrayValued',true);
0
4 / 4 / 0
Регистрация: 19.05.2021
Сообщений: 9
15.01.2024, 11:17  [ТС]
Имеем ошибку:

Error using plot3
Vectors must be the same length.

Error in lab1 (line 84)
subplot(1,2,2),plot3(x,y,Yo),

Пожалуй вставлю весь код, чтоб было понимание:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
%%%C       
clc
clear all;
nf=2; %  
minf=[1 0.5]; %    
maxf=[1.5 5]; %    
fracfact('a b ab' ); %    
N=2^nf;
fracplan=ans
fictfact=ones(N,1);
X=[fictfact ans]'
fraceks=zeros(N,nf);
for i=1:nf,
    for j=1:N,
        fraceks(j,i)=minf(i)+(fracplan(j,i)+1)*(maxf(i)-minf(i))/2;
    end;
end;
fraceks
%  
d_sigma=0.01; %  
alpha=0.5; %  
tkr_alpha=norminv(1-alpha/2); % t-
NE=round(tkr_alpha^2/(4*d_sigma^2)) %   
%     
for j=1:N,
    a=fraceks(j,1);
    b=fraceks(j,2);
    %  
    count=0; %   ()
    for k=1:NE,
        %  
        u(k)=systemeqv(a,b);
        %  ,  u(k)<0.5 ()
        if u(k)>0.5
            count=count+1;
        end
    end;
    %  ()   
    mx=mean(u);
    DX=std(u)^2;
    sigma=count/NE;
    Y(j)=sigma;
end;
%  
C=X*X';
b_=inv(C)*X*Y'
%     
%  
A=minf(1):0.1:maxf(1);
B=minf(2):0.1:maxf(2);
[k N1]=size(A);
[k N2]=size(B);
%fun = @(b, c) (integral(@(x) (B(j).*x.^(B(j) - 1)/A(i).^B(j).*exp(-x/A(i).^B(j))), b, c));
%for i=1:N1,
%    for j=1:N2,
%        an(i)=2*(A(i)-minf(1))/(maxf(1)-minf(1))-1;
%        bn(j)=2*(B(j)-minf(2))/(maxf(2)-minf(2))-1;
%        %  
%        Yc(j,i)=b_(1)+an(i)*b_(2)+bn(j)*b_(3)+an(i)*bn(j)*b_(4);
%        %  
%        Yo(j,i)=fun(0.5, 5);
%    end;
%end;
fun = @(x) B(j).*x.^(B(j) - 1)/A(i).^B(j).*exp(-x/A(i).^B(j)), b, c;
for i=1:N1,
    for j=1:N2,
        an(i)=2*(A(i)-minf(1))/(maxf(1)-minf(1))-1;
        bn(j)=2*(B(j)-minf(2))/(maxf(2)-minf(2))-1;
        %  
        Yc(j,i)=b_(1)+an(i)*b_(2)+bn(j)*b_(3)+an(i)*bn(j)*b_(4);
        %  
        Yo(j,i)=integral(fun, 0.5, 5)
    end;
end;
%    
[x,y]=meshgrid(A,B);
figure;
subplot(1,2,1),plot3(x,y,Yc),
xlabel('fact a'),
ylabel('fact b'),
zlabel('Yc'),
title('System output'),
grid on,
subplot(1,2,2),plot3(x,y,Yo),
xlabel('fact a'),
ylabel('fact b'),
zlabel('Yo'),
title('System output'),
grid on;
systemeqv.m:
Matlab M
1
2
function u=systemeqv(a,b);
u=a*(-log(rand))^(1/b);
И на всякий приложу для большего понимания скрин задания
Миниатюры
Интегрирование анонимных функций (матлаб R2023а)  
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
16.01.2024, 09:06
Лучший ответ Сообщение было отмечено dennyoff как решение

Решение

Цитата Сообщение от dennyoff Посмотреть сообщение
Пожалуй вставлю весь код, чтоб было понимание
Цитата Сообщение от dennyoff Посмотреть сообщение
И на всякий приложу для большего понимания скрин задания
Вот почему нельзя это было сделать сразу?

Ещё раз скажу, что у вас много циклов. Без них можно обойтись, работая сразу над массивами.
В коде вы неправильно записали формулу. В аргументе для экспоненты у вас возводится в степень только знаменатель, а должна возводиться вся дробь.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
clc,clear
nf=2;
minf=[1 0.5];
maxf=[1.5 5];
fracplan=fracfact('a b ab' );
N=2^nf;
X=[ones(N,1) fracplan];
fraceks=minf+(fracplan(:,1:2)+1).*(maxf-minf)/2
d_sigma=0.01;
alpha=0.5;
tkr_alpha=norminv(1-alpha/2);
NE=round(tkr_alpha^2/(4*d_sigma^2));
FR=permute(repmat(fraceks,1,1,NE),[1,3,2]);
u=(FR(:,:,1).*(-log(rand(N,NE))).^(1./FR(:,:,2)))';
mx=mean(u);
DX=std(u).^2;
Y=sum(u>0.5)/NE;
b_=(X'*X)\X'*Y';
[A,B]=meshgrid(minf(1):0.1:maxf(1),minf(2):0.1:maxf(2));
fun=@(x)A.*x.^(B-1)./A.^B.*exp(-(x./A).^B);
an=2*(A-minf(1))/(maxf(1)-minf(1))-1;
bn=2*(B-minf(2))/(maxf(2)-minf(2))-1;
Yc=b_(1)+an*b_(2)+bn*b_(3)+an.*bn*b_(4);
Yo=integral(fun, 0.5, 5,'ArrayValued',true);
 
T=['Yc';'Yo'];
Yt=cat(3,Yc,Yo);
for ii=1:2
    subplot(1,2,ii)
    plot3(A,B,Yt(:,:,ii))
    xlabel('fact a')
    ylabel('fact b')
    zlabel(T(ii,:))
    title('System output'),
    grid on
end
1
4 / 4 / 0
Регистрация: 19.05.2021
Сообщений: 9
16.01.2024, 22:10  [ТС]
Спасибо большое, до такого додуматься у меня бы не получилось. Эта задача из разряда галочки и такое мы даже не изучали
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.01.2024, 22:10
Помогаю со студенческими работами здесь

Проблема с использованием анонимных функций
Данная функция работает как и положена function tbd($a, $b) { $arr = ; for($i = 0; $i &lt; $a; $i++){ ...

Клиент-сервер, передача анонимных функций
Всем привет! Разработкой на C# занимаюсь не давно и многое еще не знаю и мне нужен совет знающих людей как мне поступить. В кратце...

Напишите функцию is_non_negative_num, используя синтаксис анонимных функций
Напишите функцию is_non_negative_num, используя синтаксис анонимных функций, которая принимает строковый аргумент и возвращает значение...

Утечка памяти в IE при использовании анонимных вложенных функций
Internet Explorer 4-6 сильно пожирает память, если на странице используются анонимные вложенные функции для задания обработчиков событий. ...

Как переделать эти строчки, без использования анонимных функций?
var parentLI = $(&quot;#nav .parent&quot;); parentLI.hoverIntent(function() { showUL($(this)); }, function() { hideUL($(this)); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru