Контрольный расчет в wxMaxima, тестирование программы
Оглавление Оглавление. 2 Постановка задачи. 3 Таблица идентификаторов. 4 Общая блок-схема алгоритма: 5 Алгоритм формирования time: 6 Алгоритм формирования Uvh: 6 Алгоритм формирования Uvih: 7 Алгоритм вывода time, Uvh, Uvih на экран: 7 Алгоритм вычисления параметра без точности: 8 Алгоритм вычисления параметра с заданной точностью: 9 Текст программы.. 10 Контрольный расчет в wxMaxima, тестирование программы. 14 Лист для подписанных расчетов. 17 Вывод. 18
Постановка задачи Дана линейная электрическая сеть, на выходе которой действует сигнал Uвхода. Цепь преобразует входной сигнал в соответствии с передаточной характеристикой Uвыхода. Необходимо написать программу, формирующую массивы Uвхода и Uвыхода, записать эти массивы во внешние текстовые файлы, вычислить параметр W с погрешностью E= 0,01. a (t-t) при t <=t1 Uвх(t)= a (t1-tнач) – b(t-t1) при t1 < t <= t2
a (t1-t)-b(t2-t1)-c(t-t2) при t >t2
a=20В/с b=0,5В/с c=17В/с tнач=10с tкон=50с t1=15с t2=45с a Uвх1 + b при Uвх<=Uвх1 Uвых(t)= a Uвх + b при Uвх1 < Uвх <= Uвх2
a Uвх2 + b при Uвх > Uвх2
a=2.5I/B b=10B Uвх1=10B Uвх2=30B P - момент времени в который Uвыхода становится больше 50. Таблица идентификаторов
Общая блок-схема алгоритма:
Алгоритм формирования time:
Алгоритм формирования Uvh:
Алгоритм формирования Uvih:
Алгоритм вывода time, Uvh, Uvih на экран:
Алгоритм вычисления параметра без точности:
Алгоритм вычисления параметра с заданной точностью: Текст программы #include <stdio.h> #include <math.h> #include <stdlib.h> #define NMAX 3000 char zastavka() { FILE *fp; fp=fopen("zastavka.txt","r"); if(fp==NULL) { printf("\nFile ne otkryt\n"); exit(1); } char str[80]; while(fgets(str,81,fp)!=NULL) { puts(str); } fclose(fp); } int zapis(float t[],float Uvh[],float Uvih[],int N) { int i; FILE *fp; fp=fopen("time.txt","w"); if(fp==NULL) { printf("\nFile ne otkryt\n"); exit(1); } for(i=0;i<N;i++) { fprintf(fp,"\n%f",t[i]); } fclose(fp); fp=fopen("Uvh.txt","w"); if(fp==NULL) { printf("\nFile ne otkryt\n"); exit(1); } for(i=0;i<N;i++) { fprintf(fp,"\n%f",Uvh[i]); } fclose(fp); fp=fopen("Uvih.txt","w"); if(fp==NULL) { printf("\nFile ne otkryt\n"); exit(1); } for(i=0;i<N;i++) { fprintf(fp,"\n%f",Uvih[i]); } fclose(fp); } void time1(int N, float time[], float tn, float tk) { float dt=(tk-tn)/(N-1); for(int i=0; i<N; i++) time[i]=tn+i*dt; } void Uvh11(int N, float time[],float Uvh[],float a,float b,float c,float t1,float t2,float tn,float tk) { for(int i=0;i<N;i++){ if(time [i]<t1) Uvh[i]=a*(time[i]-tn); else if(time[i]>t2) Uvh[i]=a*(t1-tn)-b*(t2-t1)-c*(time[i]-t2); else Uvh[i]=a*(t1-tn)-b*(time[i]-t1); } } void Uvich1(float Uvich[],int N, float Uvh[],float a,float b,float Uvh1,float Uvh2) { for(int i=0; i<N;i++){ if(Uvh[i]<=Uvh1) Uvich[i]=a*Uvh1+b; else if(Uvh[i]>Uvh2) Uvich[i]=a*Uvh2+b; else Uvich[i]=a*Uvh[i]+b; } } void output(int N, float time[], float Uvh[],float Uvih[]){ printf("%10s%10s%10s","t","Uvh","Uvih"); for(int i=0; i<N; i++) printf("\n%10.2f%10.2f%10.2f", time[i],Uvh[i],Uvih[i]); } float param(float *mas,int Z,int N,float tn,float tk) { int i; float dt,p=tn; dt=(tk-tn)/(N-1); for (i=0;i<N;i++){ if (mas[i]>Z) {p=p+dt*i; break;} } return p; } float param_t(float time[],float Uvh[], float Uvih[], int N) { int i; int Nmax=200; float a=20, b=0.5, c=17, tn=10, tk=50, t1=15, t2=45, Uvh1=10, Uvh2=30; float p1=0,p2=0,p3=0,p4=0,d; time1 (N, time , tn, tk); Uvh11 (N,time,Uvh,a, b, c, t1, t2,tn, tk); Uvich1 (Uvih,N,Uvh,2.5, 10, Uvh1, Uvh2); p1=param(Uvih,50,N,tn,tk); metka: N=N+1; time1 (N, time , tn, tk); Uvh11 (N,time,Uvh,a, b, c, t1, t2,tn, tk); Uvich1 (Uvih,N,Uvh,2.5, 10, Uvh1, Uvh2); p2=0; if(N<Nmax){ p2=param(Uvih,50,N,tn,tk); d=fabs((p2-p1)/p2); if(d<=0.01) printf("Tochnost=%4.3f\nN=%d\nVremya parametra Uvih=%3.3f\n",d,N,p2);
else { p1=p2; goto metka;}} else printf("\nN>Nmax\n"); } int main(void) { float time[NMAX], Uvh [NMAX], Uvich[NMAX]; float a=20, b=0.5, c=17, tn=10, tk=50, t1=15, t2=45, Uvh1=10, Uvh2=30; int N=20; char p; printf("Viberite komandu:\n1 - zastavka\n2 - massivi\n3 - parametr\n4 - vihod\n"); for(int i=0;i<N;i++){ scanf("%c",&p); switch(p) { case '1': { zastavka(); break; } case '2': { time1 (N, time , tn, tk); Uvh11 (N,time,Uvh,a, b, c, t1, t2,tn, tk); a=2.5; b=10; Uvich1 (Uvich,N,Uvh,a, b, Uvh1, Uvh2); output(N, time,Uvh,Uvich); zapis(time,Uvh,Uvich,100); break; } case '3': { param_t(time,Uvh,Uvich,10); break;
} case '4': { exit(1); break; } }} return(0);} Контрольный расчет в wxMaxima, тестирование программы. (%i1) a:20; (%i13) s:(tk-tn)/(n-1),numer; (%i14) Uvh(t):=if t<=t1 then a*(t-tn) else if t>t2 then a*(t1-tn)-b*(t2-t1)-c*(t-t2) else a*(t1-tn)-b*(t-t1); (%i15) for t:tn thru tk+s/10 step s do display(Uvh(t)),numer; (%i16) wxplot2d([Uvh(t)], [t,tn,tk])$ (%i17) Uvih(t):=if Uvh(t)<=Uvh1 then a1*Uvh1+b1 else if Uvh2<="" span=""> (%i18) for t:tn thru tk+s/10 step s do display(Uvih(t)),numer; (%i19) wxplot2d([Uvih(t)], [t,tn,tk])$
Популярное: Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (433)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |