假设我想计算Vout,其中Vout =(Vin /((I * w * R * C)+1)); 其中“i”应定义为sqrt(-1)。我如何在Objective-C中做到这一点?
答案 0 :(得分: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)
请注意,所有这些都是由the GNU C language (see here)提供的,并不是Objective-C本身的一部分,而是来自GNU C(Objective-C是C的超集)及其扩展(它们是由Xcode使用的GCC和LLVM编译器支持
答案 1 :(得分:0)
Objective C没有任何用于处理复杂数字的内置工具。你必须自己做计算。创建包含实部和虚部的struct imaginaryNumber的typedef。编写添加和乘以这些结构的函数,并返回另一个结构。 (要乘以2个复数(a1 + b1i)•(a2 + b2i),将数字视为多项式,并使用FOIL方法计算结果.2个虚数项的乘积变为实数,因为i•i = - 1。