Лидеры рейтинга

ID: 226425

Konstantin Shvetski

Модератор

768

Россия, Северодвинск


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

343

Россия, пос. Теплоозёрск, ЕАО


ID: 401284

Михаил Александров

Академик

278

Россия, Санкт-Петербург


ID: 325460

CradleA

Мастер-Эксперт

209

Беларусь, Минск


ID: 137394

Megaloman

Мастер-Эксперт

158

Беларусь, Гомель


ID: 400815

alexleonsm

6-й класс

130


ID: 400669

epimkin

Профессионал

120


8.8.15

09.05.2021

JS: 2.8.21
CSS: 4.5.5
jQuery: 3.6.0
DataForLocalStorage: 2021-05-15 03:46:17-standard


Создание программ на языках Pascal, Delphi и Lazarus.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)

Консультация онлайн # 200340

Раздел: Pascal / Delphi / Lazarus
Автор вопроса: Barsik22 (Посетитель)
Дата: 27.02.2021, 14:41 Консультация закрыта
Поступило ответов: 1

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Написать программу на языке программирования высокого уровня Pascal для решения задачи
Задание. Для экспериментально полученной прямой ветви вольт- амперной характеристики полупроводникового диода при u < 0,6 В подобрана аппроксимация в виде степенного многочлена:
i = au + bu2 + cu3+du4+eu5
где ток i задан в миллиамперах, напряжение u - в вольтах. Используя аппроксимацию, найдите напряжение на диоде, при котором через него будет протекать ток i=11мА. При составлении уравнения используйте параметры:
a=0,2 мА/В,
b=97 мА/В2,
c=88 мА/В3,
d=350 мА/В4
e=112 мА/В5.

Здравствуйте, Barsik22!

Смотрите код:
Код [Pascal]
const
  a=0.2;
  b=97;
  c=88;
  d=350;
  e=112;
  x=0.0001;
var
  i,u:real;
function VAKh(v:real):real;
  begin
    VAKh:=a*v+b*v*v+c*v*v*v+d*v*v*v*v+e*v*v*v*v*v;
  end;
begin
  u:=0.6;
  if VAKh(u)>11 then i:=-x else i:=x;
  while (VAKh(u)-11)>x do u:=u+i;
  Writeln('V:=',u:10:6);
end.

Удачи!

Зенченко Константин Николаевич

Старший модератор
27.02.2021, 21:30
5
Мини-форум консультации # 200340

q_id

Зенченко Константин Николаевич

Старший модератор

ID: 31795

1

= общий =    27.02.2021, 18:14
Barsik22:

i = au + bu2 + cu3+du4+eu5


Это

i = au + bu^2 + cu^3+du^4+eu^5

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

q_id

Barsik22

Посетитель

ID: 404364

2

= общий =    27.02.2021, 18:18

Да, верно! Ошибся

q_id

Barsik22

Посетитель

ID: 404364

3

= общий =    28.02.2021, 05:37

Спасибо большое! smile

Последнее редактирование 28.02.2021, 05:38 Barsik22 (Посетитель)

q_id

Алексеев Владимир Николаевич

Мастер-Эксперт

ID: 259041

4

= общий =    28.02.2021, 16:27
Зенченко Константин Николаевич:

В Вашем алгоритме шаг x=0.0001; постоянный. Я засомневался в хорошей работе итераций с таким шагом и написал программку вычисления "напряжение на диоде, при котором через него будет протекать ток i=11мА". Чтоб не связываться с компиляторами, я написал скрипт на VBS . Он работает исправно. Вы можете опробовать его и посмотреть / поправить код .
Для правки кода надо открыть скрипт-файл в текст-редакторе (в Блокноте например). Я добавил в код подробные комментарии.

Туповатая программка у нас получилась. Более 3000 итераций надо сделать по Вашему алгоритму для получения оптимального напряжения. Можно увеличить шаг итераций до x=0.001; для уменьшения числа итераций в 10 раз. Но тогда ухудшается точность вычисления.
Мне кажется, для таких задач полезно применить мат-методы с переменным шагом, который сначала широкий, но потом уменьшается по мере приближения к цели.

-----
Прикрепленные файлы:


7a3655aeee882b6f30e3fc2018e43904.zip
скачать (1.3 кб)

Алексеев Владимир Николаевич

Зенченко Константин Николаевич

Старший модератор

ID: 31795

5

= общий =    01.03.2021, 09:51

(VAKh(u)-11)>x


С вещественными числами нельзя работать как с целыми. Х = точность вычисления(если разность меньньше точности, поиск стопорится), ну и за одно шаг итерации.

Более 3000 итераций надо сделать по Вашему алгоритму для получения оптимального напряжения.

Алексеев Владимир Николаевич

Первоначально там было x=0.000 001, но на время поиска решения это не повлияло, максимум пол-секунды.

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

Алексеев Владимир Николаевич

Алексеев Владимир Николаевич

Мастер-Эксперт

ID: 259041

6

= общий =    01.03.2021, 13:56
Зенченко Константин Николаевич:

Сегодня удалось найти на "Численные методы решения нелинейных уравнений" prog-cpp.ru/digital-find , где умненькая дева напомнила: "Метод Ньютона (метод касательных) - Если известно начальное приближение x0 корня уравнения f(X) = 0, то последовательные приближения находят по формуле:
Xi = Xi-1 - f(Xi-1) / f'(Xi-1) , где f'(X) - производная функции f(X)
.

На https://ru.wikipedia.org/wiki/Метод_простой_итерации полагают, что метод Ньютона … "является быстрым, но требует вычисления производной".
Наша степенная функция f(U) = i(U) - 11 = a·U + b·U2 + c·U3 + d·U4 + e·U5 - 11 имеет очень простую производную :
f'(U) = a + 2·b·U + 3·c·U2 + 4·d·U3 + 5·e·U4 , и поэтому идеально подходит под итерации методом Ньютона.
Я подправил свой скрипт (прилагаю), и теперь всего 4 итерации (вместо 3200 !) понадобилось для достижения в 100 раз лучшей точности!

Старик Ньютон 300 лет назад придумал восхитительный метод, а мы пользуем тупые тыки на супер-мощных компьютерах…

-----
Прикрепленные файлы:


2114cf5fe8ccc61c7ac5418de91dcb87.zip
скачать (1.1 кб)

Алексеев Владимир Николаевич

Зенченко Константин Николаевич

Старший модератор

ID: 31795

7

= общий =    01.03.2021, 14:34
Алексеев Владимир Николаевич:

Это все хорошо, но Автору Вопроса - это все нужно ещё сдать, чем проще код, тем ему меньше краснеть перед преподом.
smile

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

puporev

Профессор

Рейтинг: 111

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 74

Степанов Иван /REDDS

4-й класс

Рейтинг: 1

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 0

Асмик Гаряка

Советник

Рейтинг: 0

Орловский Дмитрий

Мастер-Эксперт

Рейтинг: 0