![]() |
widerstandsschaltung
in einem labor gibt es n verschiedene widerstände mit den werten R1 bis Rn(jeweils mehrere stück). beim aufbau einer schaltung braucht man einen widerstand mit dem wert Rx, der möglichst genau realisiert werden soll
1.durch vorhandenen widerstand 2.durch parallelschaltung 2er widerstände(Rpar=Ri*Rj/ Ri+Rj) oder 3.durch serienschaltung 2er widerstände(Rser=Ri+Rj) ,wobei jener fall auszuwählen ist, bei dem der kleinste relative fehler(in %)auftritt (Fr=100*abs(Rx-R)/Rx) meine frage dazu: ich weiß nicht genau wie ich die abfragen für Rx schreiben soll, da ich mehrere widerstände (verschiedene wie gleiche)in einem vorrat habe (helfen mir hier permutationen?).. für ein paar unterstützende ideen wär ich sehr dankbar! :roll: |
Re: widerstandsschaltung
Liste der Anhänge anzeigen (Anzahl: 1)
Hi
erstmal Wellcome :hello: :party: Also ich hätt da ne ungefähre vorgehensweise .... Und zwar würd ich einfach mal (evtl. mit ner WHILE-Schleife) vom Gesammtwiederstand (Rx) den größten einzelwiederstand (sofern er nicht größer ist als der Rx) abziehen und dann das gleiche mit dem Restwiederstand. Das währ hald dann die Serienschaltung wenn du auch Parallelschaltungen machen willst musst du hald die Leitwerte (1/r) auch noch durchtesten wird dann aber aufwändiger weil du alle möglichen Kombinationen durchgehen musst ^^ (hatte mal ne arabische zu römische Zahlen procedure die das machte ^^) |
Re: widerstandsschaltung
ja natürlich helfen dir da permutationen, wobei aus der gesamtmenge nur jeweils 2 entnommen werden und es unerheblich ist ob r1+r2=r2+r1 ist.
|
Re: widerstandsschaltung
oops vergessen...herzlich willkommen :dp:
zum thema: es sollte reichen ein array und zwei schleifen, da du ja nur zwei widerstände brauchst. schematisch:
Code:
das sollte helfen!
für die widersände:
r=array (1..n) rpar,rser=array für die auswahl for i=1 to n-1 do for j=i to n do rser[n]=r[i]+r[j] ... |
Re: widerstandsschaltung
Zitat:
|
Re: widerstandsschaltung
Ich glaube das Dein Ansatz aber richtig war Teron...
Es sollen ja an beliebige Rx angenähert werden, oder? Und das heisst es kann alles benutzt werden! (so hab ich das verstanden...) :gruebel: |
Re: widerstandsschaltung
also ich habe es so verstanden: es gibt n widerstände, aus denen zwei ausgewählt werden sollen, die möglicht genau an der vorgabe liegen!
|
Re: widerstandsschaltung
Bevor wir noch lange Rätseln warten wir doch einfach bis MIC antwortet :mrgreen:
|
Re: widerstandsschaltung
Delphi-Quellcode:
hab es gerade in 5min runter gehackt, nicht getestet
procedure TForm1.Button2Click(Sender: TObject);
var R : array[1..5] of integer; var Rp : Double; var Rs : Double; var Rx : Double; var E : Double; var Ep : Double; var Es : Double; var c : Char; begin R[1] := 10; R[2] := 47; R[3] := 147; R[4] := 237; R[5] := 347; c := '0'; Rx := 144; E := 10000000.0; for n := 1 to 5 do begin for m := 1 to 5 do begin Rp := (R[n] * R[m]) / (R[n] + R[m]); Rs := R[n] + R[m]; Ep := (Rx - Rp) / Rx; Es := (Rx - Rs) / Rx; if Ep < E then begin E := Ep; R1 := R[n]; R2 := R[m]; c := 'P'; end; if Es < E then begin E := Es; R1 := R[n]; R2 := R[m]; c := 'S'; end; end; end; // Ergebnisse stehen nun in E, R1 und R2, c end; aber richtige richtung man kann das auch mit einer repeat until realisieren und schauen wo die Kostenfunktion Zitat:
|
Re: widerstandsschaltung
hi!
späte antwort, aber doch... danke danke vorerst an alle!! sollte so gemeint sein: Rx wird von mir eingegeben, und aus einem Lagerbestand(den ich aus beliebigen widerständen auffülle) sollen jene zwei widerstände ausgewählt werden, wo der kleinste relative fehler ist ... entweder es gibt den gewählten widerstand Rx im lagerbestand (vorhanden)od er soll durch parallel bzw serienschaltung realisiert, also bestmöglich an Rx angenähert werden.... |
Re: widerstandsschaltung
Hallo,
den geringsten Fehler dürftest du bekommen wenn du möglichst ganz ganz viele gleiche Widerstände in Reihe oder Parallel schaltest (unter der Vorraussetzung das die Verteilungsfunktion der Widerstandswerte symetrisch verteilt ist). |
Re: widerstandsschaltung
welche der antworten hat dir denn weitergeholfen?
|
Re: widerstandsschaltung
Zitat:
|
Re: widerstandsschaltung
so..
Zitat:
|
Re: widerstandsschaltung
hab das jetzt mal so gelöst, nur stimmt die rechnung bei mir nicht, die fehler(in %) sind zu groß.. weiß wer wo der fehler liegt?
Delphi-Quellcode:
[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]
procedure TForm1.Button3Click(Sender: TObject);
var R : array[1..6] of integer; Rp : double; Rs : double; Rx : double; E : double; Ep : double; Es : double; m,n,i : integer; begin Rx := StrToInt(Edit2.text); E := 10000000.0; if pos(floattostr(Rx),ListBox1.Items.text)<> 0 then begin ShowMessage('Widerstand vorhanden!'); Edit3.text := '0'; Edit4.text := 'Vorhanden'; end else begin for n:=0 to ListBox1.items.count-1 do begin for m := 0 to ListBox1.items.count-1 do begin Rp := (R[n] * R[m]) / (R[n] + R[m]); Rs := R[n] + R[m]; Ep := (Rx - Rp) / Rx; Es := (Rx - Rs) / Rx; if Ep < E then begin E := Ep; Edit3.text := FloatToStr(100*(abs(Ep))); Edit4.text := 'P'; end; if Es > E then begin E := Es; Edit3.text := FloatToStr(100*(abs(Es))); Edit4.text := 'S'; end; end; end; end; end; end. |
Re: widerstandsschaltung
na, das sieht nach meinen code aus :-D
Zitat:
Fehler = ((Rneu * 100.0) / Rx) - 100.0) in % Zitat:
Delphi-Quellcode:
entweder du verwendest ein dynamisches Array oder schreibst eine Klasse die die Widerstandslösungen verwaltet, dann bist du flexibel
ListBox1.items.count
|
Re: widerstandsschaltung
...
- was steht in R und wo schreibst du das rein? - nimmst du nun ein array oder die listbox? - wo steht die entgültige auswahl der widerstände?
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var R : array[1..6] of integer; Rp : double; Rs : double; Rx : double; E : double; Ep : double; Es : double; m,n,anz : integer; begin Rx := StrToInt(Edit2.text); E := 10000000.0; if pos(Edit2.text,ListBox1.Items.text)<> 0 then begin ShowMessage('Widerstand vorhanden!'); Edit3.text := '0'; Edit4.text := 'Vorhanden'; end else begin anz:=ListBox1.items.count-1; for n:=0 to anz do begin for m := 0 to anz do begin Rp := (R[n] * R[m]) / (R[n] + R[m]); Rs := R[n] + R[m]; Ep := (Rp / Rx) - 1; Es := (Rs / Rx) - 1; if Ep < E then begin E := Ep; Edit3.text := FloatToStr(100*(abs(Ep))); Edit4.text := 'P'; end; if Es > E then begin E := Es; Edit3.text := FloatToStr(100*(abs(Es))); Edit4.text := 'S'; end; end; // for end; // for end; // if end; |
Re: widerstandsschaltung
[quote="ibp"]...
- nimmst du nun ein array oder die listbox? ich werde listbox verwenden, damit ich anzeigen kann welche widerstände im lagerbestand sind - wo steht die entgültige auswahl der widerstände? ? muss zugeben hab etwas überblick verloren....:roll: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz