假设我想计算 Vout,其中 Vout = (Vin/((I*w*R*C)+1)); 其中 "i" 应定义为 sqrt(-1) 。我如何在 Objective-C 中做到这一点?
问问题
552 次
2 回答
6
然后,您可以#include <complex.h>
使用其中一个_Complex_I
或I
宏(注意大写)。包含复数值的变量类型用_Complex
属性表示,也可以简单写成complex
。
double complex c1 = 1.0 + 2.0 * I; // 1+2i
double complex c2 = 2.0 + 3.0 * I; // 2+3i
double complex sum = c1 + c2;
double complex mul = c1 * c2;
然后,您可以使用creal
和cimag
函数来获得复数的实部和虚部。
所以在你的情况下:
double Vin = 20; // in Volts
double w = 60; // frequency of your sinusoidal source (60Hz)
double R = 50; // 50 ohms
double C = 20e-6; // 20 µF
double complex invertZc = I*w*C; // Zc = 1/jwC, invertZc = jwC
double complex Vout = Vin / (1. + R*invertZc); // Vout = Vin * 1.0 / (1+Zr/Zc)
请注意,所有这些都是由GNU C 语言提供的(参见此处),并且不是 Objective-C 本身的特定部分,而是来自 GNU C(Objective-C 是 C 的超集)及其扩展(由Xcode 使用的 GCC 和 LLVM 编译器)
于 2013-11-13T16:14:34.540 回答
0
Objective C 没有任何用于处理复数的内置工具。您必须自己进行计算。创建一个包含实部和虚部的 struct imaginaryNumber 的 typedef。编写将这些结构相加和相乘并返回另一个结果的函数。(要乘以 2 个复数 (a1+b1i)•(a2+b2i),您将这些数字视为多项式并使用 FOIL 方法计算结果。两个虚数项的乘积变为实数,因为 i • i = - 1.
于 2013-11-13T16:15:58.970 回答